首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确使用代理键?

如何正确使用代理键?
EN

Stack Overflow用户
提问于 2014-10-05 10:53:14
回答 1查看 107关注 0票数 0

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

根据逻辑ERD模型,在M:N关系之间应该使用连接表。

但是,简单地使用两个邻接表的主键作为连接表的主键是否足够呢?

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

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

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

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

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-10-05 19:17:05

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

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

在物理设计级别,这取决于您将如何处理数据、要存储的数据量以及特定的DBMS。我倾向于在最初的设计中没有额外的代理键,只有在节省的成本超过成本的情况下才添加它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26199183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档