Cloud Spanner子表可以与父表具有相同的主键吗?

问题描述

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;

谢谢! 彼得

解决方法

这是允许的,但乍一看似乎有些奇怪。此数据模型将允许您为每个父行最多插入一个子行。这与向父表添加几个可选字段非常相似,但是这些可选字段在逻辑上与父表分开。因此,我认为如果:

  • 您还有许多其他字段,它们的逻辑含义不同,这使您有理由将它们存储在子表中。

和/或

  • 附加字段要么根本不填写,要么全部(或至少一个以上)填写。