大表和复合键

时间:2016-05-14 20:49:25

标签: database-design

大表记录由复合键标识,此键的组件是什么?使其复合有什么好处?

1 个答案:

答案 0 :(得分:1)

对于非常大的表(按行方式),为每个单独的行赋予唯一的ID将受到表示唯一ID的数据类型的限制。例如,如果要将唯一ID存储为基本int32,那么当您有超过2147483647个条目(int32的最大值)时会发生什么?

我将使用亚马逊的一个示例,尝试跟踪客户查看的项目。您可以想象一个名为“items_customer_has_viewed”的表。对于单个客户,拥有此表的唯一ID不会有问题。也许一个客户在一年内只在亚马逊上查看50个项目,并且该数据库可能会保持很长一段时间,保持在2147483647限制之下。但是,当您拥有数百万用户时,唯一ID的值将变得太大。

您可以选择将您的唯一ID存储为字符串或blob,但这会降低数据库速度并需要额外的计算。

解决方案是使用复合键。您没有标识单个“视图”或“客户已查看过的项目”的唯一ID,而是使用两个外键(一起形成一个复合主键)识别“视图”。现在,您只需要少于2147483647个客户,少于2147483647个项目,您就可以了。存储id时不会有问题。