可以说我有三个表,Foo
,Bar
和Baz
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 documentation将
INTERLEAVE
描述为您可以在最多七层的表之间定义父子关系的层次结构,这意味着您可以将七个逻辑上独立的表的行共置一处。
由于我们在
INTERLEAVE
和Bar
之间使用了Foo
,因此我相信我们可以保证使用相同的键将它们放置在同一位置。就像我们INTERLEAVE
Baz
和Bar
一样,它们也应该使用相同的键放置在同一位置。如果是这样,那么我们是否可以保证
Bar
和Baz
也位于同一位置,并且使用相同的键? 最佳答案
在所描述的方案中,给定FooId键,Bar和Baz并置(或在同一拆分中)。在拆分中,每个表中的行都分组在一起。
关于google-cloud-spanner - INTERLEAVE是否支持传递属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58019259/