Cloud Spanner child table 可以与 parent table 具有相同的主键吗?
Can a Cloud Spanner child table have the same primary key as the parent table?
Cloud Spanner child table 可以定义 parent table 使用的相同主键吗(child 在 parent)?我知道 child 的主键必须使用 parent 的主键作为前缀,但是 child 键 需要 才能使用至少一列?如果允许使用相同的密钥,这是不好的做法吗?如果不允许,为什么不呢?
例如:
CREATE TABLE Furniture (
FurnitureId STRING(MAX) NOT NULL,
MakerId INT64 NOT NULL,
// additional fields here...
) PRIMARY KEY (FurnitureId, MakerId);
CREATE TABLE FurnitureHistory (
FurnitureId STRING(MAX) NOT NULL,
MakerId INT64 NOT NULL,
// additional fields here...
) PRIMARY KEY (FurnitureId, MakerId),
INTERLEAVE IN PARENT Furniture;
谢谢!
彼得
这是允许的,但第一手看起来有点奇怪。此数据模型将允许您为每个父行最多插入一个子行。这与向父 table 添加几个可选字段非常相似,但是这些可选字段在逻辑上与父 table 分开。所以我想这是有道理的,如果:
- 您有许多具有不同逻辑含义的附加字段,这使您有理由将它们存储在子项中 table。
And/or
- 附加字段要么根本不填写,要么在其中一个字段已填写时全部(或至少超过一个)填写。
Cloud Spanner child table 可以定义 parent table 使用的相同主键吗(child 在 parent)?我知道 child 的主键必须使用 parent 的主键作为前缀,但是 child 键 需要 才能使用至少一列?如果允许使用相同的密钥,这是不好的做法吗?如果不允许,为什么不呢?
例如:
CREATE TABLE Furniture (
FurnitureId STRING(MAX) NOT NULL,
MakerId INT64 NOT NULL,
// additional fields here...
) PRIMARY KEY (FurnitureId, MakerId);
CREATE TABLE FurnitureHistory (
FurnitureId STRING(MAX) NOT NULL,
MakerId INT64 NOT NULL,
// additional fields here...
) PRIMARY KEY (FurnitureId, MakerId),
INTERLEAVE IN PARENT Furniture;
谢谢! 彼得
这是允许的,但第一手看起来有点奇怪。此数据模型将允许您为每个父行最多插入一个子行。这与向父 table 添加几个可选字段非常相似,但是这些可选字段在逻辑上与父 table 分开。所以我想这是有道理的,如果:
- 您有许多具有不同逻辑含义的附加字段,这使您有理由将它们存储在子项中 table。
And/or
- 附加字段要么根本不填写,要么在其中一个字段已填写时全部(或至少超过一个)填写。