0

伙计们,如果我想确保它们在 3NF 中,我有这两张表,这是正确的方法吗?

我也可以知道有下划线但也用星号表示的主键的用途,这背后的原因是什么?

桌子

在此处输入图像描述

我的答案

第三范式

StaffDetails( StaffID ,SName,DOB,DivisionNo*)

部门(部门编号,部门名称,部门主管ID)

StaffProject( StaffId *, ProjectNo *,SName, ProjectName,HoursAssigned)

项目(项目编号,项目名称)

请假设加粗的属性是下划线。太感谢了。

4

2 回答 2

6

SName不,当您复制并StaffProjectStaffProject表格中时,它并不完全是 3NF 。

这些表可能应该是:

员工详情

柱子 数据类型 约束
员工详情 VARCHAR2 首要的关键
名字 VARCHAR2
出生日期 日期
部门编号 INT 外键(除法)

分配

柱子 数据类型 约束
部门编号 INT 首要的关键
名称 VARCHAR2 (可能是独一无二的)
分区主管 ID VARCHAR2 外键(员工详情)

员工项目

柱子 数据类型 约束
员工编号 VARCHAR2 复合主键、外键(StaffDetails)
项目编号 VARCHAR2 复合主键,外键(项目)
分配的时间 数字 检查 > 0

项目

柱子 数据类型 约束
项目编号 INT 首要的关键
项目名 VARCHAR2 (可能是独一无二的)

至于您的符号问题,这是您的导师似乎正在使用的惯例,但不一定是全球公认的,因此您最好问他们;但是,似乎主键带有下划线,而外键旁边有一个星号。

StaffProject将具有既是复合主键又是外键的一部分的列,因此具有两种表示法。

于 2021-09-29T14:56:34.997 回答
4

表的主键上的一列或多列也可以是另一个表的外键。

在您的示例中,似乎:

  • (StaffId, ProjectNo) 是StaffProject.
  • StaffId也是表的FK StaffDetails;这就是为什么它有一个星号。
  • ProjectNo也是表的FK Project;这就是为什么它本身有一个星号。

如果您希望您的模型是 3NF,您需要删除额外的依赖项:

  • 在这种情况下DivNameDivSupervisorID是多余的,应该从表中删除StaffDetail
  • ProjectName并且SName在 中也是多余的StaffProject。您必须删除它们才能使模型符合 3NF。
于 2021-09-29T14:59:03.030 回答