2010-11-09 90 views
1

我想正常化我的表到所有3NF我相信以下所有是在3NF,因为没有传递性。请澄清这一点,如果我错了正常化在一个数据库中

客户(CUSTID,CUSTNAME,custAddress,custDOB,custEmail)
雇员(EMPID,empName,empPhone,empAddress,BRANCHNAME)

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

回答

5

的假设是每一个员工工作在多个分支和每个分支都有一个或多个员工

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

要理解这一点,让我们思考一下如何代表在关系中的多个分支上工作的员工。要做到这一点的唯一方法是有多行具有相同的员工信息,只有BranchName字段不同。对于一个根本不在分支机构工作的员工(比如首席执行官)呢,那么那个员工就没有行了,他就完全消失了!

让我们分开。

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

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

BRANCHES_EMPLOYEES(branchID, empID) 
2

或者您可以使用角色表中的单个人员表格来显示哪些是客户,哪些是员工。这种设计可以让某人成为客户和员工。不重复名称,更好的标准化。人与角色是多对多的(一个人可以有许多角色;角色可以属于许多人)。

+0

但上面已经在3NF? – aherlambang 2010-11-09 02:14:19

+0

@EquinoX:我很怀疑它。但我们只能猜测,因为你没有指定任何键或依赖关系。 – sqlvogel 2010-11-09 20:06:56

3

“但上面已经在3NF?”

你的问题是无法回答的。

因为这是正式交代,你必须提供:

  • 一个FULL模式的数据库(即也模型/代表员工与部门之间的许多一对多的关系之一),和
  • 完成确定属性依赖关系的集合。

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