首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该在我的滑雪租赁数据库模式中包含一个带有主键的连接表吗?

我应该在我的滑雪租赁数据库模式中包含一个带有主键的连接表吗?
EN

Database Administration用户
提问于 2023-05-03 10:45:34
回答 2查看 55关注 0票数 0

我需要制作ER图和Ski租赁的关系模式。我有一个CustomerRentalSki作为实体以及它们的属性。CustomersRentals应该有一对多的关系,而RentalsSki之间的关系应该是多对多的(一个出租可以有多个滑雪板,一个滑雪可以租给许多客户)。当我对如何生成关系模式做了一些研究时,我发现必须使连接表Rentals_skis包含来自RentalsSki的外键。是否需要在连接表中添加主键?另外,我应该在ER图中添加新的实体Rentals_skis吗?

这是我用Dia制作的图表的链接。

关系模式:https://imgur.com/a/taRFbdb

ER图:https://imgur.com/a/EmdQlkN

EN

回答 2

Database Administration用户

回答已采纳

发布于 2023-05-03 11:29:23

是否需要在连接表中添加主键?

每个表都应该定义一个主键,以遵循良好的数据库设计。一张没有表的表是取消正规化的标志。在您的示例中,Rental_skis连接表的主键是自然的,并将在(rental_id, ski_id)上定义,即本例中每个外键字段的组合。因为同一个ski_id不可能不止一次地存在于同一个rental_id

注意,通过实现这个连接表,您不再需要将字段ski_id直接存储在Rentals表中,并且在设计中应该从该表中删除该列。

另外,我应该在ER图中添加新的实体Rentals_skis吗?

我会这么想的。

票数 -1
EN

Database Administration用户

发布于 2023-05-03 18:39:59

不,`Rental_skis‘不是强制性的,它实际上是相反的。这将是问题的根源。在这种情况下,ER图更正确,不需要更新。

Rentals已经是一个连接表。它已经有两个外键:customer_idski_id。他们完全回答了这个问题:“谁在这个时候租了哪个滑雪?”

如果您按照显示的模式(使用Rentals_skis),那么您可以在Rentals中的ski_id指向一个滑雪板,而在Rentals_skis中的ski_id指向另一个滑雪。在这种情况下,哪一种是正确的?这位顾客租了哪种滑雪板?

是的,Rentals需要一个主键。你可以和rental_id一起去,是的。但是最好使用一个复合键:customer_id, start_dateski_id, start_date。这里的区别仅仅是观点:更重要的是顾客还是滑雪。

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

https://dba.stackexchange.com/questions/326703

复制
相关文章

相似问题

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