在表格中改变我的PK

时间:2011-05-08 14:00:25

标签: mysql database database-design

如果我有一个名为university的表格,其中包含两个字段,一个用于id_university,一个用于name_of_university,另一个用于id_university。大学的每个名称都是独一无二的,不能重复。

在这种情况下,我可以移除name_of_university,并将university ----------------------- pk name_of_university 作为主键,是吗?

这样的事情:

{{1}}

感谢

4 个答案:

答案 0 :(得分:4)

你可以这样做,但你不应该这样做。大学的名称是商业密钥,因此可能会发生变化。识别候选主键的标准之一是它们应该是不变的。

因此,最佳做法是使用代理(合成)主键,用于外键等,并在业务键上保持唯一约束。所以,好消息是,您当前的数据模型接近于最佳实践。只需在名称栏中添加一个唯一的,就可以了。

 alter table university
      add constraint uni_name_uk unique (name_of_university);

答案 1 :(得分:2)

最好将主键保留为id_university,并在name_of_university上添加唯一索引。

答案 2 :(得分:0)

是的。

但不推荐。
长期的PK会让一切都变慢,一路走下去。

在InnoDB上,PK包含在每个二级密钥中,这会使您的表格膨胀。
加入的速度会慢一些,插入速度会慢一些,排序也会慢一点 你的桌子会更大。 这是一个非常糟糕的主意:-Sorry

让你的PK尽可能短并自动增量(如果可能的话),这将导致快速,愉快的代码。

答案 3 :(得分:0)

是的,这是正确的。钥匙是钥匙。如果您有多个密钥,那么您将主密钥称为哪个密钥并没有什么不同。重要的是你打算实施和使用它们的方式。