INTERLEAVE 是否支持传递 属性?
Does INTERLEAVE support the transitive property?
假设我有三个表,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
描述为
You can define hierarchies of parent-child relationships between tables up to seven layers deep, which means you can co-locate rows of seven logically independent tables.
由于我们在 Bar
和 Foo
之间使用了 INTERLEAVE
,我相信我们可以保证它们位于同一位置,具有相同的密钥。就像我们 INTERLEAVE
Baz
和 Bar
一样,它们也应该位于同一位置,使用相同的密钥。
如果那是真的,那么我们可以保证 Bar
和 Baz
位于同一位置,也具有相同的密钥吗?
在所描述的场景中,Bar 和 Baz 在给定 FooId 密钥的情况下并置(或在同一拆分中)。在拆分中,每个 table 中的行组合在一起。
假设我有三个表,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
描述为
You can define hierarchies of parent-child relationships between tables up to seven layers deep, which means you can co-locate rows of seven logically independent tables.
由于我们在 Bar
和 Foo
之间使用了 INTERLEAVE
,我相信我们可以保证它们位于同一位置,具有相同的密钥。就像我们 INTERLEAVE
Baz
和 Bar
一样,它们也应该位于同一位置,使用相同的密钥。
如果那是真的,那么我们可以保证 Bar
和 Baz
位于同一位置,也具有相同的密钥吗?
在所描述的场景中,Bar 和 Baz 在给定 FooId 密钥的情况下并置(或在同一拆分中)。在拆分中,每个 table 中的行组合在一起。