可能的重复:
为什么使用 int 作为查找表的主键?
到目前为止,我习惯于为每个表创建一个 ID 列,它的实用性使我不必考虑有关主键理论的决策。
我大学的教授建议全班从一个或多个字段制作主键,这些字段构成关于每一列的一个唯一信息。是的,我想养成使用自然键而不是代理键的习惯。维基百科上列出了代理键的优缺点,我严格推荐这篇文章
我见过人们对所有内容都使用整数 ID 字段,但没有人评判这种方法,因为
我开始认为额外的 ID 字段只是创建冗余数据而没有实际好处。那么当我可以使用其他列作为关键字段时,为什么还要创建 ID 列呢?

另一方面
额外资源:
我从阅读文章中得出的结论是,我应该尽可能使用自然键,而不是每次都跳过考虑自然键并使用代理键,好像这是一个标准。
我正在设计一个具有多个查找表的数据库,其中包含主要实体的可能属性。我正在考虑使用 4 或 5 个字符的键来标识这些查找值,而不是自动递增的整数,这样当我将这些属性 ID 存储在主表上时,我将看到有意义的值而不仅仅是随机数。
使用字符字段作为主键而不是整数对性能有什么影响?
如果这很重要,我正在使用 MySQL。
[编辑]
这些查找表很少添加新记录。它们是手动维护的,基于字符的密钥也是手动创建的。下面是一个例子:
CUISINES
ID Description
----- --------------
CHNSE Chinese
ITALN Italian
MXICN Mexican
Run Code Online (Sandbox Code Playgroud) 我有一个包含四列的表,这些列都是不可为空的,并且数据是这样的,需要所有四列来区分唯一记录。这意味着如果我要创建一个主键,它需要包含所有列。对表的查询几乎总是拉回单个记录,即所有列都将在查询中被过滤。
由于需要搜索每一列,拥有主键对我有好处吗(除了强制记录的唯一性)?
我有几个表,其中的记录可以用几个广泛的业务领域唯一标识。过去,我将这些字段用作 PK,并考虑到以下好处:
但是,我听说过一个创建合成IDENTITY INTPK的案例,而是使用单独的UNIQUE约束来强制执行业务密钥。优点是狭窄的 PK 使得二级索引小得多。
如果一个表有没有比PK其他指标,我看不出有任何理由赞成第二种方法,虽然在一个大表它可能是最好的假设,指数可能在未来是必要的,因此,有利于在狭窄合成PK . 我是否缺少任何考虑?
顺便说一下,我并不是反对在数据仓库中使用合成键,我只是对何时使用单一的宽泛 PK 以及何时使用窄 PK 加上宽泛的 UK 感兴趣。