对于我的数据库类的家庭作业,我很难理解如何将此模式规范化为第四范式。
以下是我必须做的事情:
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)
答案 0 :(得分:2)
首先,您有两个不同的关系模式,没有共同的属性,因此将它们单独标准化是正确的。
所以,从第一个关系开始:
Books(AccessionNo, Isbn, Title, Author, Publisher)
AccessionNo → Isbn
Isbn → Title
问题在于没有使用属性Author
和Publisher
指定依赖关系,而我们可以将关系解释为描述书籍,在这种情况下,还应该存在其他两个依赖关系:
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,因此它们自动处于第三范式。它们也处于第四范式,因为没有多值依赖,需要特殊处理。