多关系 ERD 和 SQL 建模
Posted
技术标签:
【中文标题】多关系 ERD 和 SQL 建模【英文标题】:Modeling multiple relationship ERD and SQL 【发布时间】:2021-12-30 02:00:02 【问题描述】:我是数据库新手,我必须为两个实体集之间的关系建模:预订和用户。我在它们之间创建了两种关系(多对多和一对多),例如
在 SQL 中,我创建了 3 个表:Booking、Users 和联结表 Booking_Users like i
简而言之,我想要实现的是:一个用户可以进行多次预订。一份预订可以供多人使用,他们将被添加到用户表中。每个用户可以关联多个预订。我必须存储有关谁负责预订的信息(Bookings 表中有一个外键 User_id)以及分配给哪些预订用户(此信息存储在联结表中)。 我的问题是,这是建立这种关系的好方法吗?
【问题讨论】:
小心。术语可能会造成混淆和误导,但它也会为您提供可以忽略的信息。 “一个用户可以预约”与“一个预约可以多人预约”是不一样的。对我来说,这是两组不同的信息。进行预订的人不一定是以某种方式为其预订的人之一”。旅行社将为许多不同的人进行大量预订,但预订不是为代理的。 【参考方案1】:没关系。缺点是它没有强制执行“主要用户”是“预订用户”之一的规则。您可以通过将外键从 Booking 设置为 Booking_User(BookingId,UserId) 来强制执行此操作,但这会使 DML 有点复杂,因为在添加 Booking_user 之前您无法设置主用户。
常见的替代设计是将 IsPrimary 列添加到 Bookings_Users 联结表。但这两种设计都很常见。
【讨论】:
感谢您的回答。我之前没有提到过,但是“主要用户”是“预订用户”之一这一事实是该数据库的要求之一。哪个是更好的做法 - 我的解决方案或添加 IsPrimary 列?或者也许一样好吗?以上是关于多关系 ERD 和 SQL 建模的主要内容,如果未能解决你的问题,请参考以下文章