【问题标题】:How do I translate relationships (that have attributes) into relational schema/sql?如何将关系(具有属性)转换为关系模式/sql?
【发布时间】:2013-03-24 16:16:33
【问题描述】:

我对数据库设计比较陌生。

我最近了解到 EER 中的关系可以拥有属性,因此构建了以下实体。

图书馆会员 (会员ID)

书籍 (bookID)

两个实体通过关系“reserve”连接,每本书可以被0到1个LibraryMember预约,每个LibraryMember可以预约0到多本书。

现在,问题来了。我已将时间和日期等属性分配给“保留”关系,但我不知道如何将其转换为关系模式。 LibraryMembers 和 Books 之间的关系不是多对多的关系,是否仍然可以创建一个名为“reserve”的表来链接它们?

(我被告知只有在关系从多到多 EER 映射时才会创建一个附加表)

非常感谢您的帮助,谢谢。

【问题讨论】:

  • 您应该明确地使用 libraryMember 和 Books 之间的映射表(也出于历史原因 - 意思是,这本书已经消失了...... X 次)。一本书不能被借出两次不应该是模式的任务(可能是触发器/过程,但充其量是在应用层)。所以我建议使用 3 个表来完成这项工作

标签: sql database


【解决方案1】:

您可以像这样在预订中映射成员和书籍

CREATE TABLE members(
member_id INT,
member_name VARCHAR(64),
PRIMARY KEY(member_id)
);

CREATE TABLE books(
book_id INT,
title VARCHAR(64),
PRIMARY KEY(book_id)
);

CREATE TABLE reservations(
reservation_id INT,
book_id INT,
member_id INT,
reservation_date DATETIME,
PRIMARY KEY(reservation_id),
CONSTRAINT FOREIGN KEY (book_id) REFERENCES books (book_id),
CONSTRAINT FOREIGN KEY (member_id) REFERENCES members (member_id)
);

但是您仍然需要实现逻辑,以防止在 @Najzero 评论的同时保留一本书两次。

【讨论】:

  • 非常感谢你们解决这个问题!我想我可以使用触发器来防止一本书被预订两次?
猜你喜欢
  • 2017-03-28
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
相关资源
最近更新 更多