我正在尝试使用我拥有的数据来实现3NF,但我感到困惑。这些是我的表格:
FACULTY table DEPARTMENT table STUDSGROUP table STUDENT table
FACULTY_ID DEPARTMENT_ID STUDSGROUP_ID STUDENT_ID
FACULTY_NAME DEPARTMENT_NAME ACADEMIC YEAR STUDENTS_NAME
FACULTY_DEAN HEAD OF DEPARTMENT COURSE/SPECIALITY STUDENTS_GROUP
COURSE/SPECIALITY
DOB/DATE OF BIRTH
我想我可以这样做,但我认为我不对。
FACULTY table
FACULTY_ID,PK
DEAN
DEPARTMENT table
DEPARTMENT_ID,PK
FACULTY_ID,fk
DEPARTMENT_NAME
HEAD OF DEPARTMENT
STUDSGROUP table
STUDSGROUP_ID, pk
ACADEMIC YEAR
SPECIALITY
STUDENTS table
STUDENT_ID, pk
FACULTY_NAME,FK
STUDSGROUP_ID,FK
FIRST_NAME
LAST_NAME
DOB
答案 0 :(得分:3)
规范化要求您知道模式的各个部分是如何相关的。高达3NF和BCNF(差不多,但不完全相同 - 虽然你很难找到一个不在BCNF中的3NF的实际例子),但最重要的特征是功能依赖。
另一个关键点是'保护';你不应该完全失去专栏。例如,您的原始Faculty表具有ID号,名称和院长。您的修订版本缺少教员姓名;这是你重新设计的一个错误。
你已经确定每个部门属于一个教师,这看起来似乎有道理。
您修改后的学生组表似乎与原始表相同。这可能没问题,但也许课程/专业部分意味着学生团体与部门相关联,因此也就是教师。如果是这样,那么您可能需要一个课程/专业表来确定课程/专业和部门,让学生小组确定课程/专业中的特定年级组。
您的原始学生表有一个课程/专业,也有一个学生组;这样就有可能数据会说学生X正在学生表中进行考古学,但学生组表示学生X正在做音乐。这是允许的吗?如果没有,您是否最好只在学生表中设置学生小组,留下来确定课程/专业,年级,部门,以及教师?您修改后的架构会向学生表添加教师ID(但会删除课程/专业);这仍然会在数据中留下冲突的机会。
您是否需要一张桌子来确定有效的学年?可能不是。是否应该有工作人员的桌子,以便您可以识别院长和部门负责人。教职员可以担任部门主管吗?教师以外的部门?