2013-03-02 60 views
0

我在理解如何在将表格归一化为3NF后如何表示外键方面存在困难。将表格规范化为3NF

让我们考虑的表是这样的:

student(studentid,studentname,courseid,coursename,dateofexam,marks,grade) 

我可以能够找出FD如下:

studentid -> studentname 
courseid -> coursename 
{student,courseid} -> dateofexam,marks 
marks -> grade 

现在我试图创建一个新的表有FD非ket属性是这样的:

marks grade 
studentid studentname 

现在我如何将这些表的外键与我的旧表相关联student?我很困惑这样做。

在此先感谢。

+0

什么是标记和档次之间的区别? – 2013-03-02 19:17:21

回答

1

你FD实际上告诉您如何:

studentid -> studentname 
courseid -> coursename 
{student,courseid} -> dateofexam,marks 
marks -> grade 

每一行是一个单独的表。 其他表中存在的键将是fk。 在这种情况下:

{student,courseid} -> dateofexam,marks 

将被studentid,courseid和标记(这可能必须是一个id太)

这将是这样的

学生( studentid, studentname )

场( courseid, coursename)

考试( examid, fk_studentid, fk_courseid, dateofexam, fk_markid)

商标( markid, 等级)

+0

“标记”不需要是一个id号码。身份证号码与正常化无关。当你谈论如何规范化一个关系时,你通常不被允许引入新的列(就像你在考试中使用“检查”一样)。只是使用你开始的。对于你命名为“考试”的表格,关键是{studentid,courseid}。 – 2013-03-02 17:52:41