这是什么让我感到困惑我经常在数据库表中有复合主键.这种方法的不利方面是,当我删除或编辑条目时,我有很多额外的工作.不过,我觉得这种做法是本着数据库设计的精神.
另一方面,我的朋友,从来没有使用复合键,而是在表中引入另一个“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,Value int )
哪种方式更好?使用第二种方法的不利方面是什么?有什么建议么?
解决方法
我个人更喜欢你的第二种方法(并且几乎100%的时间会使用它) – 引入代理ID字段.
为什么?
>为引用表的任何表使生命更容易 – 只需单个ID列(而不是2,3或甚至更多列,您需要加入的所有时间),JOIN条件就会更简单.
>使生活变得更加容易,因为引用表的任何表仅需要携带单个ID作为外键字段 – 而不是复合键中的多个列
>使数据库可以处理创建唯一ID列(使用INT IDENTITY)使生命变得更加容易
However,I do not know how they
preserve uniqueness of data entries.
非常简单:将UNIQUE INDEX放在复合列上,否则将用作您的主键!
CREATE UNIQUE INDEX UIX_WhateverNameYouWant ON dbo.ProxUsingDept(fkProx,fkDept)
现在,您的表格保证您的表中永远不会有一对重复的(fkProx,fkDept)对 – 解决问题!