代理密钥的适当使用



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

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

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

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

即假设博物馆具有2的SIGHT_ TYPE_。对于多个博物馆来说,如果以上是真的,你不会发生这种情况吗?22 2-博物馆A22 2-博物馆B

因此,在这种情况下,使用代理密钥(比如SIGHT_ID)作为唯一标识符是否绝对必要?

换言之,通常使用两个相邻表的PK作为连接表或组合表的PK,但类似的情况是否例外?

感谢

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

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

在物理设计级别,它取决于您将对数据做什么,将存储的数据量,以及特定的DBMS。我倾向于在初始设计中不使用额外的代理密钥,只有在节省的费用超过成本的情况下才添加它。

相关内容

  • 没有找到相关文章

最新更新