假设一个特定的国家有许多景点(纪念碑、公园、博物馆),当然,一个特定的景点可以存在于许多州。
根据逻辑ERD模型,在M:N关系之间应该使用连接表。
但是,简单地使用两个邻接表的主键作为连接表的主键是否足够呢?
也就是说,您有一个国家/地区、景点和SIGHT_TYPE表,其中景点是连接表。假设一个特定的国家可以有多个博物馆(即博物馆是一个SIGHT_TYPE),这意味着景点表中的每一条记录都不能被唯一标识,不是吗?
例如,假设博物馆的SIGHT_TYPE_ID为2,德国的country_id为22。对于多个博物馆,如果上述情况属实,你不会发生这种情况吗? 22 2-博物馆A 22 2-博物馆B
因此,在这种情况下,使用代理键(比如SIGHT_ID )作为唯一标识符是绝对必要的吗?
换句话说,通常使用两个相邻表的PK作为连接表或复合表的PK,但是这些情况是例外吗?
谢谢
发布于 2014-10-05 19:17:05
连接表(由OK组成)的组合键在逻辑设计级别上是完全正确的。它们保证了连接表中行的唯一性。它们还保证关系的给定实例中的所有参与者只参与关系的一个实例。如果您使用的是某种应用程序构建器工具,则该工具必须能够处理复合PK。
通常情况下,该约束正是您想要的。如果向连接框中添加额外的列作为主键,则必须在两个外键上添加唯一约束,或者依赖应用程序来防止错误的重复。大多数情况下,这些解决方案都不是很好。
在物理设计级别,这取决于您将如何处理数据、要存储的数据量以及特定的DBMS。我倾向于在最初的设计中没有额外的代理键,只有在节省的成本超过成本的情况下才添加它。
https://stackoverflow.com/questions/26199183
复制相似问题