0

假设一个特定的国家有很多景点(纪念碑、公园、博物馆),当然一个特定的景点可以存在于许多州。

就逻辑 ERD 模型而言,M:N 关系之间应使用联结表。

但是,简单地使用两个相邻表的 PK 作为连接表的 PK 就足够了吗?

也就是说,您有一个 COUNTRY、SIGHTS 和 SIGHT_TYPE 表,其中 SIGHTS 是联结表。假设一个特定的国家可以有多个博物馆(即 MUSEUM 是一个 SIGHT_TYPE),这意味着 SIGHTS 表中的每条记录都不能唯一标识,不是吗?

即假设 MUSEUM 的 SIGHT_TYPE_ID 为 2,GERMANY 的 country_id 为 22。对于多个博物馆,如果上述情况属实,您不会发生这种情况吗?22 2 - 博物馆 A 22 2 - 博物馆 B

因此,在这种情况下,使用代理键(例如 SIGHT_ID)作为唯一标识符是绝对必要的吗?

换句话说,通常使用两个相邻表的 PK 作为连接或组合表的 PK,但是这些情况是否例外?

谢谢

4

1 回答 1

0

联结表(由 FK 组成)的复合键在逻辑设计级别上是完全可以的。它们保证联结表中行的唯一性。它们还保证给定关系实例中的所有参与者只参与关系的一个实例。如果您使用某种应用程序构建器工具,则该工具必须能够处理复合 PK。

通常,该约束正是您想要的。如果您在连接框中添加一个额外的列作为主键,您要么必须在两个外键上添加唯一约束,要么依赖应用程序来防止错误的重复。大多数时候,这些解决方案都不是那么好。

在物理设计级别,这取决于您要如何处理数据、要存储的数据量以及特定的 DBMS。我倾向于在初始设计中不使用额外的代理键,并且只有在节省的成本超过成本时才添加它。

于 2014-10-05T11:17:04.650 回答