Database design 大表和组合键

Database design 大表和组合键,database-design,Database Design,大表记录由复合键标识,该键的组件是什么?使其复合的好处是什么 对于非常大的表(按行),为每一行指定一个唯一id将受到表示唯一id的数据类型的限制。例如,如果将唯一id存储为基本int32,当您有2147483647个以上的条目(最大值为int32)时会发生什么情况 我将使用Amazon的一个示例,尝试跟踪客户查看了哪些项目。您可以想象一个名为“items\u customer\u has\u viewed”的表。对于单个客户来说,为该表提供唯一的id不会有问题。也许一个客户一年只能在亚马逊上浏览

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

对于非常大的表(按行),为每一行指定一个唯一id将受到表示唯一id的数据类型的限制。例如,如果将唯一id存储为基本int32,当您有2147483647个以上的条目(最大值为int32)时会发生什么情况

我将使用Amazon的一个示例,尝试跟踪客户查看了哪些项目。您可以想象一个名为“items\u customer\u has\u viewed”的表。对于单个客户来说,为该表提供唯一的id不会有问题。也许一个客户一年只能在亚马逊上浏览50件商品,而该数据库可能会在相当长的一段时间内保持较小,保持在2147483647的限制之下。但是,当您拥有数百万用户时,唯一id的值将变得太大

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


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

哪个键是“此键”?您的问题不清楚。您是在问“复合键的组件”是什么意思吗?出于这个原因,大多数数据库将允许非常大的数字数据类型,因此您不需要求助于字符串、BLOB或复合键。例如,默认情况下,PostgreSQL序列最多生成2^63-1,大整数类型最多可生成9223372036854775807。数字类型最多可处理小数点前的131072位数字。所以,如果您需要使用这些技巧之一来存储这么多行,那么您对数据库的选择就非常糟糕。