表示多值属性

时间:2014-05-12 21:12:30

标签: database-design entity-relationship

我正在阅读Teorey,Simison等人的“数据库设计”一书。在某一点上,它解释了如何将具有多值属性的实体映射到关系表中。示例如下,其中多值属性是业余爱好。

 Employee(Employee_ID(PK),name,surname,hobby) 

导致两个表

 Employee(Employee_ID(PK),name,surname)
 Hobby(Employee_ID(PK),hobby(PK))

本书或多或少地说“给定具有主键p的实体E,附加到ER图的多值属性E被映射到其自己的表,其中主键由p和属性值组成( s)“。这是一般规则吗? 使用多值属性书来跟上关系。

 Author(Author_ID(PK),name,book)

创建下面的两个表是不够的,其中书的PK只是Book_ID而Author_ID是FK而没有成为Book的PK的一部分?

 Author(Author_ID(PK),name)
 Book(Book_ID,book,Author_id(FK))

2 个答案:

答案 0 :(得分:0)

你是对的;你不能 在Hobby或Book中使用复合主键,但如果你愿意,你当然可以。 this question接受的答案很好地概述了您何时可能想要使用其中一个。

顺便说一句,如果你真的要实现你的例子,你可能想要三个表:Author,Book和它们之间的associative entity,因为作者可能会写很多书和一本书可能有很多作者。

答案 1 :(得分:0)

  

创建下面的两个表是不够的,其中书的PK只是Book_ID而Author_ID是FK而没有成为Book的PK的一部分?

你错误地认为候选键{book_id}已经足够了,因为只有当作者集不重叠时才会这样。如果它们重叠,则需要{book_id,author_id}。

虽然新PK必然是两列的组合,但您的书是错误的。 (同样,如果员工的爱好不重叠,那么hobby_id就是Hobby的候选键。)所以本书的列转换是正确的,但你必须自己确定每个新表的候选键。

请参阅this answer关系设计。