可以说我有三个表,FooBarBaz

CREATE TABLE Foo (
FooId BYTES(MAX)
) PRIMARY KEY (FooId);
CREATE TABLE Bar (
FooId BYTES(MAX),
BarId BYTES(MAX)
) PRIMARY KEY (FooId, BarId),
INTERLEAVE IN PARENT Foo on DELETE CASCADE;
CREATE TABLE Baz (
FooId BYTES(MAX),
BazId BYTES(MAX)
) PRIMARY KEY (FooId, BazId),
INTERLEAVE IN PARENT Foo on DELETE CASCADE;

下图演示了INTERLEAVE层次结构:
+-----+   +-----+
|     |   |     |
| Foo <---+ Bar |
|     |   |     |
+--^--+   +-----+
   |
+--+--+
|     |
| Baz |
|     |
+-----+

Cloud Spanner's documentationINTERLEAVE描述为

您可以在最多七层的表之间定义父子关系的层次结构,这意味着您可以将七个逻辑上独立的表的行共置一处。

由于我们在INTERLEAVEBar之间使用了Foo,因此我相信我们可以保证使用相同的键将它们放置在同一位置。就像我们INTERLEAVE BazBar一样,它们也应该使用相同的键放置在同一位置。

如果是这样,那么我们是否可以保证BarBaz也位于同一位置,并且使用相同的键?

最佳答案

在所描述的方案中,给定FooId键,Bar和Baz并置(或在同一拆分中)。在拆分中,每个表中的行都分组在一起。

关于google-cloud-spanner - INTERLEAVE是否支持传递属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58019259/

10-11 10:18