一个如何与两个表交错?

时间:2019-09-17 15:34:50

标签: google-cloud-spanner

假装我有模式

CREATE TABLE Account (
AccountId BYTES(MAX),
Foo STRING(1024)
) PRIMARY KEY (AccountId);"

CREATE TABLE Customer (
CustomerId BYTES(MAX),
Bar STRING(1024)
) PRIMARY KEY (CustomerId);"

然后我创建一个新表:

CREATE TABLE Order (
AccountId BYTES(MAX),
CustomerId BYTES(MAX),
Baz STRING(1024)
) PRIMARY KEY (AccountId, CustomerId);"

我想与INTERLEAVE Account一起Customer。一个人怎么能做到呢?在构建层次结构时,我熟悉如何INTERLEAVE使用一个表,但是不确定如何使用两个表来实现这一点。

1 个答案:

答案 0 :(得分:5)

您不能在另一个其他表中交错一个表,但是可以创建交错表的层次结构。在您的示例中,这意味着将Customer表中的Account表和Order表中的Customer表交织在一起,如下所示:

CREATE TABLE Account (
  AccountId BYTES(MAX),
  Foo STRING(1024)
) PRIMARY KEY (AccountId);

CREATE TABLE Customer (
  AccountId BYTES(MAX),
  CustomerId BYTES(MAX),
  Bar STRING(1024)
) PRIMARY KEY (AccountId, CustomerId),
INTERLEAVE IN PARENT Account;

CREATE TABLE Order (
  AccountId BYTES(MAX),
  CustomerId BYTES(MAX),
  OrderId BYTES(MAX),
  Baz STRING(1024)
) PRIMARY KEY (AccountId, CustomerId, OrderId),
INTERLEAVE IN PARENT Customer;

之所以无法按照您要求的方式交错一个表与另外两个表,是因为交错表实际上意味着Cloud Spanner会将交错的子表的行与父表物理地存储在一起。如果要将一个表与两个不同的,不相关的父表交错,则无法确定子行的存储位置。