SQL Server 规范化策略 : varchar vs int Identity

标签 sql sql-server database-design optimization normalization

我只是想知道最佳解决方案是什么。

假设我有一个规范化的数据库。整个系统的主键是一个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/

相关文章:

c# - 在 SQL 数据库中插入 Datetimepicker 文本

c# - 适用于 EF Core 时强制 SUM 方法返回 NULL

sql - 遍历表格的每一列

mysql - mysql中房屋销售网站的数据库设计

sql-server - 使用 DateTime 作为主键的 Sql Server

mysql - 有效处理账户往来余额

sql - 替换 T-SQL 中的 Unicode 字符

php - 从数据库中选择随机项目

sql - 尝试拆分截止日期前后的事件计数

c# - 引用数据表 C# 更新 SQL 表的最佳方法