gpt4 book ai didi

sql-server - SQL Server 中的多对多关系结构有或没有额外的主键列?

转载 作者:行者123 更新时间:2023-12-02 05:25:14 25 4
gpt4 key购买 nike

假设我们有两个表:RolesReports。并且存在它们之间是多对多的关系。当然,唯一的解决办法我想到的是创建一个交叉表,我们将其命名为RoleReport。我可以看到该表结构的两种方法:

1. Columns: RoleReportId, RoleId, ReportId
PK: RoleReportId
2. Columns: RoleId, ReportId
PK: RoleId, ReportId

它们之间是否有任何真正的区别(性能或其他方面)?

最佳答案

无论如何,您都需要一个关于 (RoleId, ReportId) 的复合 UNIQUE 索引。

不使用 PRIMARY KEY 是没有意义的。

如果你使用 CLUSTERED PRIMARY KEY(这是默认设置),这在性能方面会更好,因为它的大小会更小。

聚簇主键在每条记录中仅包含两列:RoleIDReportID,而二级索引将包含三列:RoleIDReportIDRoleReportID(作为行指针)。

您可能希望在 ReportID 上创建一个额外的索引,该索引可用于搜索给定 Report 的所有 Roles

如果满足以下两个条件,则为这种关系制作代理键会有一些意义:

  1. 您的关系中有其他属性(即此表包含其他列,例如 Date 或其他任何内容)
    • 您有很多的表用FOREIGN KEY
    • 引用这种关系

在这种情况下,在 FOREIGN KEY 关系中引用单列 PRIMARY KEY 会更好。

既然你好像没有这个需求,那就复合PRIMARY KEY吧。

关于sql-server - SQL Server 中的多对多关系结构有或没有额外的主键列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1537464/

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