2012-03-15 116 views
1

我试图使用我有的数据来实现3NF,但我感到困惑。这些是我有的表格:实现SQL 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

它可能有助于了解*为什么*你试图达到3NF(如果这是家庭作业,你可以添加作业标签?人们愿意帮助,但宁愿知道)。另外,你有没有想到的设计是3NF? – 2012-03-15 05:07:52

+1

我添加了一个家庭作业标签我忘了这么做,即时通讯尝试学习规范化我想只是做这个例子来帮助我理解更多 – kryticrecte 2012-03-15 05:15:42

+0

我只是想确定如果即时通讯正确的做对了吗? – kryticrecte 2012-03-15 05:16:56

回答

3

规范化要求您知道模式的各个部分是如何相关的。最多3NF和BCNF(几乎但不是完全相同的东西—,尽管你很难推出一个实用的3NF示例,但它不在BCNF中),最重要的功能是功能依赖。

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

您已经确定每个部门都属于教职员,看起来似乎很合理。

修改后的学生组表似乎与原来的一样。这可能是好的,虽然也许这个课程/专业的一部分意味着一个学生群体与一个部门相关联,因此也是一个教师。如果是这样,那么你可能需要一个课程/专业表来标识课程/专业和部门,让学生组确定课程/专业中的特定年份组。

你原来的学生表有一个课程/专业,也是一个学生组;这留下了数据表明学生X在学生表中进行考古学的可能性,但学生组表明学生X正在做音乐。这是允许的吗?如果不是的话,你最好只在学生表中留下学生组,留下来确定课程/专业,年份,部门和教员?您的修订架构会将学员ID添加到学生表中(但会删除课程/专业);这仍然会在数据中留下冲突的机会。

你需要一个表来确定有效的学年吗?可能不是。如果有工作人员的桌子,那么你可以确定院长和部门负责人。教员的院长可以成为部门负责人吗?教职工之外的部门?

+0

我想你是对的,我明白你的意思 – kryticrecte 2012-03-15 06:51:03