数据库设计 – 复合主键?

前端之家收集整理的这篇文章主要介绍了数据库设计 – 复合主键?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是什么让我感到困惑我经常在数据库表中有复合主键.这种方法的不利方面是,当我删除或编辑条目时,我有很多额外的工作.不过,我觉得这种做法是本着数据库设计的精神.

另一方面,我的朋友,从来没有使用复合键,而是在表中引入另一个“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)对 – 解决问题!

猜你在找的MsSQL相关文章