【问题标题】:Can a Cloud Spanner child table have the same primary key as the parent table?Cloud Spanner 子表可以与父表具有相同的主键吗?
【发布时间】:2020-10-27 01:28:47
【问题描述】:

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 INT64 NOT NULL,
  // additional fields here...
) PRIMARY KEY (FurnitureId, MakerId),
  INTERLEAVE IN PARENT Furniture;

谢谢! 彼得

【问题讨论】:

    标签: parent-child primary-key google-cloud-spanner


    【解决方案1】:

    这是允许的,但第一眼看起来有点奇怪。此数据模型将允许您为每个父行插入最多一个子行。这与向父表添加几个可选字段非常相似,但这些可选字段在逻辑上与父表分开。所以我想这是有道理的,如果:

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

    和/或

    • 其他字段要么根本不填写,要么在填写其中一个字段时全部填写(或至少一个以上)。

    【讨论】:

      猜你喜欢
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 2017-07-06
      • 2021-07-06
      相关资源
      最近更新 更多