2013-03-24 139 views
1

我对数据库设计比较陌生。如何将关系(具有属性)转换为关系模式/ sql?

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

LibraryMembers (MEMBERID)

图书 (BOOKID)

这两个实体通过关系 “储备”,每本书可以由0保留1 LibraryMember连接,并且每个LibraryMember是能够保留0到很多书。

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

(我一直在告诉我们,当关系从许多映射到许多EER附加表只创建)

帮助将非常感谢,谢谢。

+0

你应该使用libraryMember和Books之间的映射表(也是出于历史原因 - 也就是说,这本书已经消失了X倍)。一本书不能借出两次不应该是模式的任务(可能是一个触发器/过程,但至多在应用层)。所以我推荐使用3个表格来完成这个工作 – Najzero 2013-03-24 07:49:44

回答

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评论逻辑。

+0

非常感谢你们两个人的清理!我想我可以利用触发器防止书籍被保留两次? – DisneyGuy 2013-03-24 09:16:50

相关问题