如果我有一个名为university
的表格,其中包含两个字段,一个用于id_university
,一个用于name_of_university
,另一个用于id_university
。大学的每个名称都是独一无二的,不能重复。
在这种情况下,我可以移除name_of_university
,并将university
-----------------------
pk name_of_university
作为主键,是吗?
这样的事情:
表
{{1}}
感谢
答案 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)
是的,这是正确的。钥匙是钥匙。如果您有多个密钥,那么您将主密钥称为哪个密钥并没有什么不同。重要的是你打算实施和使用它们的方式。