将模式规范化为第四范式

Normalizing a Schema into Fourth Normal Form

关于我的数据库的家庭作业 class 我正在努力理解如何将此模式规范化为第四范式。

这是我必须做的:

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 -> title 和 Deptid -> deptname

我不确定如何处理这两个函数依赖关系,请问有人可以提供一些帮助吗?我已经在网上查找了示例,但正在努力将其与我的具体问题联系起来。感谢您的帮助,不胜感激!

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

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)

首先,你有两个不同的关系模式,没有共同的属性,所以分开归一化是正确的。

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

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 范式由以下分解给出:

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

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

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

作为最后的说明:所有产生的分解都是 Boyce-Codd 范式,因此它们已经自动处于第三范式。它们也属于第四范式,因为没有多值依赖关系,需要特殊处理。