问题描述
Cloud Spanner子表是否可以定义父表使用的相同主键(子表与父表交错)?我知道孩子的主键必须使用父母的主键作为前缀,但是子键是否需要才能至少使用一列?如果允许使用相同的密钥,这是不好的做法吗?如果不允许的话,为什么呢?
例如:
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),INTERLEAVE IN PARENT Furniture;
谢谢! 彼得
解决方法
这是允许的,但乍一看似乎有些奇怪。此数据模型将允许您为每个父行最多插入一个子行。这与向父表添加几个可选字段非常相似,但是这些可选字段在逻辑上与父表分开。因此,我认为如果:
- 您还有许多其他字段,它们的逻辑含义不同,这使您有理由将它们存储在子表中。
和/或
- 附加字段要么根本不填写,要么全部(或至少一个以上)填写。