这就是让我困惑的地方。我经常在数据库表中使用复合主键。这种方法的缺点是,当我删除或编辑条目时,我有相当多的额外工作。但是,我觉得这种方法符合数据库设计的精神。
另一方面,我的一些朋友从不使用组合键,而是在表中引入另一个'id‘列,所有其他键都是FK。在编写删除和编辑过程时,他们的工作量要少得多。但是,我不知道它们如何保持数据条目的唯一性。
例如:
方式1
create table ProxUsingDept (
fkProx int references Prox(ProxID) NOT NULL,
fkDept int references Department(DeptID) NOT NULL,
Value int,
PRIMARY KEY(fkProx,fkDept)
)方式2
create table ProxUsingDept (
ID int NOT NULL IDENTITY PRIMARY KEY
fkProx int references Prox(ProxID) NOT NULL,
fkDept int references Department(DeptID) NOT NULL,
Value int
)哪种方式更好?使用第二种方法的坏处是什么?有什么建议吗?
发布于 2011-01-19 23:54:28
我个人更喜欢你的第二种方法(并且几乎100%的时间都会使用它)-引入一个 ID字段。
为什么?
ID作为外键字段-而不是来自复合键的多个列ID>d12列的创建但是,我不知道它们如何保持数据条目的唯一性。
非常简单:在复合列上放置一个唯一的索引,否则将用作主键!
CREATE UNIQUE INDEX UIX_WhateverNameYouWant
ON dbo.ProxUsingDept(fkProx, fkDept)现在,你的表保证你的表中永远不会有一对重复的(fkProx, fkDept) -问题解决了!
发布于 2011-01-19 23:57:07
您可以提出以下问题:
但是,我不知道它们如何保持数据条目的唯一性。
可以通过在列上声明单独的复合唯一索引来保持唯一性,否则这些列将形成自然主键。
哪种方法更好?
不同的人有不同的观点,有时甚至持有强烈的观点。我想你会发现越来越多的人使用代理整数键(这并不是说它是“正确”的解决方案)。
使用第二种方法的坏处是什么?
以下是使用代理键的一些缺点:
发布于 2011-01-19 23:55:25
在像M:N连接表这样的情况下,组合键最有意义(如果性质或M:N链接发生变化,您无论如何都必须修改这个表)。
https://stackoverflow.com/questions/4737190
复制相似问题