首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >复合主键?

复合主键?
EN

Stack Overflow用户
提问于 2011-01-19 23:35:20
回答 2查看 21.4K关注 0票数 23

这就是让我困惑的地方。我经常在数据库表中使用复合主键。这种方法的缺点是,当我删除或编辑条目时,我有相当多的额外工作。但是,我觉得这种方法符合数据库设计的精神。

另一方面,我的一些朋友从不使用组合键,而是在表中引入另一个'id‘列,所有其他键都是FK。在编写删除和编辑过程时,他们的工作量要少得多。但是,我不知道它们如何保持数据条目的唯一性。

例如:

方式1

代码语言:javascript
复制
create table ProxUsingDept (
    fkProx int references Prox(ProxID) NOT NULL,    
    fkDept int references Department(DeptID) NOT NULL,    
    Value int,    
    PRIMARY KEY(fkProx,fkDept)
)

方式2

代码语言:javascript
复制
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
)

哪种方式更好?使用第二种方法的坏处是什么?有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2011-01-19 23:55:25

在像M:N连接表这样的情况下,组合键最有意义(如果性质或M:N链接发生变化,您无论如何都必须修改这个表)。

票数 0
EN

Stack Overflow用户

发布于 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中没有改变。这可能是第二种方法的一个问题。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4737190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档