这就是让我困惑的地方。我经常在数据库表中使用复合主键。这种方法的缺点是,当我删除或编辑条目时,我有相当多的额外工作。但是,我觉得这种方法符合数据库设计的精神。
另一方面,我的一些朋友从不使用组合键,而是在表中引入另一个'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:55:25
在像M:N连接表这样的情况下,组合键最有意义(如果性质或M:N链接发生变化,您无论如何都必须修改这个表)。
发布于 2013-04-30 03:58:46
我知道这篇文章已经有很长一段时间了。但是我不得不遇到关于组合键的类似情况,所以我在这里发表了我的想法。
假设我们有两个表T1和T2。
T1具有列C1和C2。
T2具有列C1、C2和C3
C1和C2是表T1的复合主键和表T2的外键。
让我们假设我们对表T1 (T1_ID)使用了一个代理键,并将其用作表T2中的外键,如果表T1的C1和C2的值发生了变化,那么在表T2上强制执行引用独创性约束是额外的工作,因为我们只查看表T1中的代理键,它的值在表T1中没有改变。这可能是第二种方法的一个问题。
https://stackoverflow.com/questions/4737190
复制相似问题