有没有一个(key:value)对数据类型可以用作SQL中的列——特别是Google Cloud Spanner



假设我想将商店的销售额存储在Google Cloud Spanner数据库中的表中。该表(除了作为主键的销售ID之外(还必须存储销售的产品ID列表,以及每个销售产品的数量。理想情况下,这将是像这样的柱的形式

productsSold ARRAY<product OBJECT <productID INT64, quantity INT64>>

也就是说,数组中的每个元素都是一个对象,包含产品ID以及相应销售产品的数量。我在Google Cloud Spanner中看到了STRUCT数据类型,这将是理想的,但似乎无法使用它创建列。

或者,它可以作为存储在两个单独的阵列中

productIDs ARRAY
quantities ARRAY

但这可能会导致数组不同步,因为productIDs中的每个元素都没有直接链接到数量的相应元素。

你建议什么是根据最佳数据库约定并通过谷歌云扳手存储这些数据的理想方式?提前感谢!

首先,我通常会将其设计为使用两个交错的表,因此如下所示:

CREATE TABLE Products (
ProductId STRING(36) NOT NULL,
Name STRING(200),
) PRIMARY KEY (ProductId);
CREATE TABLE Sales (
SaleId STRING(36) NOT NULL,
CustomerId STRING(36) NOT NULL,
) PRIMARY KEY (SaleId);
CREATE ProductSales (
SaleId STRING(36) NOT NULL,
ProductSaleId INT64 NOT NULL,
ProductId STRING(36) NOT NULL,
Quantity INT64,
) PRIMARY KEY (SaleId, ProductSaleId), INTERLEAVE IN PARENT (Sales);

如果出于某种原因必须/想要使用数组将它们存储在一个表中,那么可以使用CHECK CONSTRAINT来确保数组具有相同的大小:

CREATE TABLE Sales (
SaleId STRING(36) NOT NULL,
ProductIds ARRAY<STRING(36)>,
Quantities ARRAY<INT64>,
CONSTRAINT arrays_equal_length CHECK(ARRAY_LENGTH(ProductIds) = ARRAY_LENGTH(Quantities)),
) PRIMARY KEY ProductId;

相关内容

  • 没有找到相关文章

最新更新