将模式规范化为第四范式

时间:2016-10-18 04:15:37

标签: database functional-dependencies multivalue

对于我的数据库类的家庭作业,我很难理解如何将此模式规范化为第四范式。

以下是我必须做的事情:

Normalize the following schema, with given constraints, to 4NF:

Books(accessionno, isbn, title, author, publisher)
Users(userID, name, deptID, deptname)

Accesssionno -> isbn
Isbn -> title
Userid -> name
Userid -> deptid
Deptid -> deptname

这是我的尝试:

Books(accessionno, isbn)
Books2(accessionno, title)
Books3(accessionno, author, publisher)

Users(userID, name)
Users2(userID, deptID)
Users3(userID, deptName)

我感到困惑的是isbn - >标题和Deptid - > DEPTNAME

我不确定如何处理这两个功能依赖,有人可以提供一些帮助吗?我查了一下onlnie的例子,但我正在努力将它与我的具体问题联系起来。感谢您的帮助,非常感谢!

编辑:在看了更多示例并阅读更多资料后,这是我第二次尝试解决方案。有什么建议吗?

Books(accessionno, isbn, title, author, publisher)
Accesssionno -> isbn
Isbn -> title

Normalized:
Books1(accessionno, isbn)
Books2(accessionno, isbn, title)
Books3(accessionno, author, publisher)

Users(userID, name, deptID, deptname)
Userid -> name
Userid -> deptid
Deptid -> deptname

Normalized:
Users1(userID, name)
Users2(userID, deptID)
Users3(userID, deptID, deptName)

1 个答案:

答案 0 :(得分:2)

首先,您有两个不同的关系模式,没有共同的属性,因此将它们单独标准化是正确的。

所以,从第一个关系开始:

Books(AccessionNo, Isbn, Title, Author, Publisher)
AccessionNo → Isbn
Isbn → Title

问题在于没有使用属性AuthorPublisher指定依赖关系,而我们可以将关系解释为描述书籍,在这种情况下,还应该存在其他两个依赖关系:

Isbn → Author
Isbn → Publisher

或者,等效,可以写出关系具有两个依赖关系:

Books(AccessionNo, Isbn, Title, Author, Publisher)
AccessionNo → Isbn
Isbn → Title, Author, Publisher

通过这种“修正”,您可以通过生成以下子标记来实现Boyce-Codd正常形式的关系:

R1 < (Isbn, Author, Publisher, Title),
{ Isbn → Author
  Isbn → Publisher
  Isbn → Title }>

R2 < (AccessionNo Isbn),
{ AccessionNo → Isbn } >

其中第一个键具有唯一键Isbn,而第二个键具有唯一键AccessionNo

另一方面,如果模式应该只提到两个功能依赖关系,那么BCNF中的分解会更复杂并且不是很重要:

R1 < (Isbn, Title) ,
{ Isbn → Title } >

R2 < (AccessionNo, Isbn) ,
{ AccessionNo → Isbn } >

R3 < (AccessionNo, Author, Publisher) ,
{ } >

其中第一个关系具有键Isbn,第二个关键具有键AccessionNo,第三个键具有键(AccessionNo, Author, Publisher)

对于第二种关系,

Users(UserID, Name, DeptID, DeptName)    
UserID → Name
UserID → DeptID
DeptID → DeptName

依赖关系是有意义的,因为架构描述了与用户及其部门的关系,其中每个用户属于一个部门。在这种情况下,Boyce-Codd Normal Form由以下分解给出:

R1 < (UserID, Name, DeptID) ,
{ UserID → Name
  UserID → DeptID } >

R2 < (DeptID, DeptName) ,
{ DeptID → DeptName } >

其中第一个关系具有键UserID(描述用户),第二个关系具有键DeptID(描述部门)。

最后注释:所有产生的分解都是Boyce-Codd Normal Form,因此它们自动处于第三范式。它们也处于第四范式,因为没有多值依赖,需要特殊处理。