【发布时间】:2015-04-02 10:19:19
【问题描述】:
我正在构建我的第三个数据库,但我不确定如何构建主键和唯一约束以确保数据完整性。
当公开数据发布时,数据库会定期更新,有些是每月更新,有些是每年更新,查询负载会很低。
我有一些表格,其中的列组合使每一行都独一无二。我知道我可以使用复合主键,但我不确定这是否是最佳实践,因为我阅读的许多关于此的文章都有相互矛盾的观点。
例如,一张表需要五列来保证数据类型的唯一性:
- smallint
- 字符(7)
- varchar(7)
- smallint
- varchar(3)
我相信这将使主键最多 25 个字节,并且所有这五列都将被定期选择并经常在 where 子句中使用。其中一个 smallints 也是外键,但没有外键会引用此表。
我知道的唯一替代方法是为每一行创建一个唯一标识符,将其设置为主键并在五列上创建一个唯一约束。
- 最好的选择是什么?如果要使用复合主键,应该是集群还是非集群?
- 复合主键是否有建议的最大列数和字节数?
【问题讨论】:
-
由于没有外键引用此表,复合聚簇主键没有缺点。您只需要根据查询表的方式决定哪一列应该是前导列,然后为剩余的用户可能经常搜索的列添加非聚集索引(键与否)。
-
我认为前导列应该是查询中最常用的列?其他列的顺序有关系吗?
-
是的,前导列取决于表的查询方式。例如,如果外键列是作为一对多标识关系的多方通常访问的,则将外键列指定为主键中的第一个是有意义的。
标签: sql-server database tsql