我只是想知道最佳解决方案是什么。
假设我有一个规范化的数据库。整个系统的主键是一个varchar。我想知道的是我应该将此 varchar 与 int 相关联以进行规范化还是保留它?保留为 varchar 更简单,但可能更优化
比如我可以有
People
======================
name varchar(10)
DoB DateTime
Height int
Phone_Number
======================
name varchar(10)
number varchar(15)
或者我可以
People
======================
id int Identity
name varchar(10)
DoB DateTime
Height int
Phone_Number
======================
id int
number varchar(15)
当然还要加上其他几个一对多的关系。
大家怎么看?哪个更好,为什么?
最佳答案
我相信大多数开发过任何大型现实世界数据库应用程序的人都会告诉您代理键是唯一现实的解决方案。
我知道学术界会不同意,但这是理论纯粹性和实用性之间的区别。
任何合理大小的查询必须在使用非代理键的表之间进行连接,其中一些表具有复合主键很快变得无法维护。
关于SQL Server 规范化策略 : varchar vs int Identity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/144109/