【问题标题】:Primary Key Datatype for Single Column Table单列表的主键数据类型
【发布时间】:2020-09-02 10:36:01
【问题描述】:
我正在研究一个数据库模型,并且有一些表(我们称它们为 T 表),它们的记录数总是非常有限(
现在,我很困惑:
一个单列(例如部门(varchar 和主键))类型 varchar 表和 具有两列 ID(int 和主键)的同一表) 和部门(varchar)。
谁能解释一下在我的场景中哪一个更有意义?
非常感谢。
【问题讨论】:
标签:
mysql
sql
database
data-modeling
datamodel
【解决方案1】:
大多数开发人员将这些表称为查找表。
考虑是否允许更改部门名称。我不是在谈论他们改变的可能性有多大,而是说它是否可能发生。事实上,如果这种情况很少发生,考虑这一点更为重要。
如果您使用以 varchar 作为主键的单列表,并且部门名称发生更改,您将如何更新引用它的其他表中的行?您只需要更新Departments 表中的一行,但您可能需要更新Employees 表或Budgets 表中引用该部门的数百行,或Reports 表中的数千行,或 Sales 表中的数百万行。
如果您使用带有关联 varchar 的整数主键作为部门名称,则无需更改引用该部门的所有其他行。即使名称发生变化,他们也可以继续通过整数引用它。
【解决方案2】:
PK总是用序列号或序号,关键是它们没有意义,既然它们没有意义,就没有必要改变它(毕竟把一个无意义的东西换成另一个无意义的东西有什么意义呢?),那么我们就可以实现稳定了。