数据库设计 – 复合主键?
发布时间:2020-12-12 16:16:48 所属栏目:MsSql教程 来源:网络整理
导读:这是什么让我感到困惑我经常在数据库表中有复合主键.这种方法的不利方面是,当我删除或编辑条目时,我有很多额外的工作.不过,我觉得这种做法是本着数据库设计的精神. 另一方面,我的朋友,从来没有使用复合键,而是在表中引入另一个“id”列,而所有其他键只是FK.他
这是什么让我感到困惑我经常在数据库表中有复合主键.这种方法的不利方面是,当我删除或编辑条目时,我有很多额外的工作.不过,我觉得这种做法是本着数据库设计的精神.
另一方面,我的朋友,从来没有使用复合键,而是在表中引入另一个“id”列,而所有其他键只是FK.他们在编辑删除和编辑过程时工作少得多.但是,我不知道它们如何保留数据输入的唯一性. 例如: 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条件就会更简单.
非常简单:将UNIQUE INDEX放在复合列上,否则将用作您的主键! CREATE UNIQUE INDEX UIX_WhateverNameYouWant ON dbo.ProxUsingDept(fkProx,fkDept) 现在,您的表格保证您的表中永远不会有一对重复的(fkProx,fkDept)对 – 解决问题! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |