我知道这是主观的,但我想知道人们的意见,并希望在设计sql server表结构时能够应用一些最佳实践.
我个人认为在固定(最大)长度varchar上键入一个表是禁止的,因为它意味着必须在使用它作为外键的任何其他表中传播相同的固定长度.使用a int,将避免必须在整个板上应用相同的长度,这必然导致人为错误,即1个表具有varchar (10),而另一个表varchar (20).
这听起来像是最初设置的噩梦,而且意味着将来维护表格也很麻烦.例如,假设keyed varchar列突然变成12个字符而不是10个字符.你现在必须去更新所有其他表,这可能是一个巨大的任务多年.
我错了吗?我错过了什么吗?我想知道其他人对此的看法,以及坚持使用int作为主键是避免维护噩梦的最佳方法.
最近,我一直在阅读所有类型的索引,主要的建议是将聚簇索引放在表的主键上,但如果主键实际上没有在查询中使用(通过选择或连接)并且仅仅用于纯粹的关系目的,因此在这种情况下不会被查询.例如,说我有一个car_parts表,它包含3列,car_part_id,car_part_no,和car_part_title. car_part_id是唯一的主键标识列.在这种情况下car_part_no也是独一无二的,也是最有可能的car_part_title. car_part_no是最受查询的,所以将聚簇索引放在该列而不是car_part_id?问题的基础是什么列实际上应该具有聚集索引,因为您只允许其中一个?
我有一个存储员工详细信息的SQLServer表,列ID是GUID类型,而EmployeeNumber列是INT类型.大多数时候,我会在加入和选择条件时处理EmployeeNumber.
我的问题是,在ClusteredIndex为EmployeeNumber时,将PrimaryKey分配给ID列是否合理?
我知道在设计表时使用主键更好.
但我想知道何时设计一个主键,需要设置auto_increment?
如果完成,有什么好处?
我听,这可以保持b树的稳定,但我不知道为什么?
如果table有一个唯一列,那么将唯一列设置为主键或添加新列'id'作为auto_increment主键更好?
你能帮助我吗?谢谢.
题
主键是否在功能上决定了表中的所有其他属性?
我的想法
当然必须不是吗?这不是主键的重点吗?