gpt4 book ai didi

database - 实现 SQL 3NF 规范化

转载 作者:搜寻专家 更新时间:2023-10-30 22:17:24 24 4
gpt4 key购买 nike

我正在尝试使用我拥有的数据实现 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

最佳答案

规范化要求您知道架构的各个部分是如何相关的。直到 3NF 和 BCNF(几乎,但不完全相同——尽管你很难找到一个不在 BCNF 中的 3NF 的实际例子),最重要的特征是函数依赖。

另一个关键点是“保护”;您不应该完全丢失列。例如,您原来的 Faculty 表有一个 ID 号、一个姓名和一个院长。您的修订版缺少教师姓名;那是您重新设计中的错误。

您已经确定每个系都属于一个教员,这似乎很有道理。

您修改后的学生组表似乎与原始表相同。这可能没问题,尽管其中的类(class)/专业部分可能意味着一个学生团体与一个部门相关联,因此与一个教员相关联。如果是这样,那么您可能需要一个类(class)/专业表来标识类(class)/专业和部门,让学生组标识类(class)/专业中的特定年级组。

你原来的学生表有一个类(class)/专业,还有一个学生组;这留下了这样的可能性,即数据会说学生 X 在学生表中正在做考​​古学,但学生组表明学生 X 在做音乐。这是允许的吗?如果不是,您是否最好将学生组放在学生表中,让其确定类(class)/专业、年份、部门,从而确定教职员工?您修改后的模式将教师 ID 添加到学生表中(但确实删除了类(class)/专业);这仍然会在数据中留下冲突的机会。

您是否需要表格来识别有效的学年?可能不会。是否应该有员工表,以便您可以识别系主任和系主任。系主任可以当系主任吗?他们院系以外的部门?

关于database - 实现 SQL 3NF 规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9714232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com