将模式规范化为第四范式
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
问题是属性 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 范式由以下分解给出:
R1 < (UserID, Name, DeptID) ,
{ UserID → Name
UserID → DeptID } >
R2 < (DeptID, DeptName) ,
{ DeptID → DeptName } >
其中第一个关系有关键字UserID
(描述用户),第二个关系有关键字DeptID
(描述部门)。
作为最后的说明:所有产生的分解都是 Boyce-Codd 范式,因此它们已经自动处于第三范式。它们也属于第四范式,因为没有多值依赖关系,需要特殊处理。
关于我的数据库的家庭作业 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
问题是属性 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 范式由以下分解给出:
R1 < (UserID, Name, DeptID) ,
{ UserID → Name
UserID → DeptID } >
R2 < (DeptID, DeptName) ,
{ DeptID → DeptName } >
其中第一个关系有关键字UserID
(描述用户),第二个关系有关键字DeptID
(描述部门)。
作为最后的说明:所有产生的分解都是 Boyce-Codd 范式,因此它们已经自动处于第三范式。它们也属于第四范式,因为没有多值依赖关系,需要特殊处理。