我目前正在为即将举行的数据库管理考试进行复习。
有一个关于非规范化示例员工数据库的问题。问题如下,schema也如下图所示:
问题:使用“员工”数据库对任意两个(或更多)表进行反规范化以生成 2NF 中的表。您必须准确解释为什么该表是 2NF 而不是 3NF。
架构:
我的答案:
我会将“工资”表非规范化为“员工”表。为了规范化,我会将 {salary, from_date, to_date} 移动到员工表中并删除“薪水”表。注意:from_date 不再是 'employees' 中主键的一部分。
'employees' 表不再是 3NF,现在是 2NF。这是因为表中引入了“传递依赖”。
传递依赖如下:'salary' 依赖于'from_date'。它是可传递的而不是部分的,因为 'from_date' 不是主键的组成部分。在部分依赖中,行列式必须是主键的一部分。
基本上对于这个问题,我需要创建一个传递依赖。这个模式似乎有点稀疏,而且日期是主键的一部分这一事实也让我有点失望。
如果上述依赖是错误的,有人可以为我指出一个吗?
另一种可能的解决方案是将“部门”非规范化为“部门”。我可以将“dept_name”添加到“dept_emp”中。但从查看该表的 SQL 可以看出,“dept_no”是主键的一部分。
对此的任何指导将不胜感激。