gpt4 book ai didi

database-design - 复合主键与否?

转载 作者:行者123 更新时间:2023-12-03 13:20:31 29 4
gpt4 key购买 nike

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

另一方面,我的一些 friend 从不使用复合键,而是在表中引入另一个“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)
)

方式二
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
)

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

最佳答案

我个人喜欢 您的第二种方法(并且几乎 100% 的时间都会使用它) - 引入代理 ID field 。

为什么?

  • 使引用您的表的任何表的生活变得更加轻松 - JOIN 条件是 简单得多只需要一个 ID 列(而不是 2、3 甚至更多列,您需要一直加入)
  • 使生活更轻松,因为任何引用您的表的表只需要携带一个 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) 对。在你的 table 上 - 问题解决了!

    关于database-design - 复合主键与否?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4737190/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com