DB中的规范化

时间:2010-11-09 02:06:08

标签: database normalization

我想将我的桌子标准化为所有3NF我相信以下所有内容都在3NF,因为没有传递性。如果我错了,请澄清一下

CUSTOMERS(custID,custName,custAddress,custDOB,custEmail)
EMPLOYEES(empID,empName,empPhone,empAddress,BranchName)

假设是每个员工在多个分支机构工作,每个分支机构都有一个或多个员工

3 个答案:

答案 0 :(得分:5)

  

假设是每个员工在多个分支机构工作,每个分支机构都有一个或多个员工

但这不是你建模的。在您的关系中,对分支机构和员工具有功能依赖性。

要理解这一点,让我们考虑一下如何代表在您的关系中的多个分支机构工作的员工。唯一的方法是拥有相同员工信息的多行,只有BranchName字段不同。一个完全不在分支机构工作的员工(比如CEO)怎么样,那么那个员工没有任何行,他就完全消失了!

让我们分开。

BRANCHES(branchID, BranchName)
EMPLOYEES(empID, empName, empPhone, empAddress)

但现在我们需要在两者之间建立多对多的对应关系。使用连接表的首选方法是使用连接表。

BRANCHES_EMPLOYEES(branchID, empID)

答案 1 :(得分:3)

“但上面已经在3NF?”

你的问题无法回答。

要使其正式回答,您必须提供:

  • 数据库的 FULL 架构(即也模拟/代表员工与分支机构之间多对多关系的架构),
  • 完整一组已识别的属性依赖项。

你只给了前者的一部分,而后者则没有。

答案 2 :(得分:2)

或者您可以拥有一个带有Role表的Person表,该表显示哪些是客户,哪些是员工。该设计将允许某人既是客户又是员工。不重复名称,更好的规范化。人与角色是多对多的(一个人可以有很多角色;一个角色可以属于很多人)。