Database 这张桌子适合2NF吗?

Database 这张桌子适合2NF吗?,database,database-design,Database,Database Design,学生选择课程表 studentnumber name age selected course credit 1 tom 23 math 5 2 jim 20 computer 4 如果表格不适合2NF,为什么以及如何纠正它。谢谢。不是2NF。这是: 学生: studentnumber name

学生选择课程表

 studentnumber   name     age     selected course   credit

    1             tom      23            math           5

    2              jim      20          computer         4


如果表格不适合2NF,为什么以及如何纠正它。谢谢。

不是2NF。这是:

学生:

studentnumber   name     age    

1               tom      23            
2               jim      20     
课程:

coursenumber   name      credit

1              math      5
2              computer  4
学生课程:

studentnumber  coursenumber

1              1
2              2

因为您希望分解不完全依赖于原始候选关键字的属性(例如课程和学生编号)。上述属性仅部分取决于原始候选人密钥(例如,学分取决于课程而非学生。年龄和姓名取决于学生而非课程)。对于每个部分依赖项,您将创建一个新表,以便属性完全依赖于新的候选项/主键。

样本中没有足够的数据来确定所有的决定因素

根据我们对学生和课程的了解,我们有理由猜测学生编号决定姓名和年龄,所选课程决定学分。假设(学生编号、所选课程)是表的候选键也是合理的。这都是猜测工作,基于每个人之前的学生和课程经验


另一个答复中给出了正确的解决方案,除了引入一个新的数据项,即“coursenumber”并不是将数据放入2NF的严格必要条件,前提是没有两个课程可以具有相同的“选定课程”。然而,发明课程编号可能是个好主意

为什么不是2NF,我是新手。希望你能给我更多的细节。谢谢你最初的候选密钥是什么?你怎么知道。也许这些问题很愚蠢。对不起,我是新手。谢谢。您可以通过查找所有其他属性所依赖的属性来确定候选密钥。在这种情况下:姓名和年龄取决于学号,学分取决于课程。这意味着,最初,studentnumber和course是您的候选键。明白了。但在您设计的表中。您没有使用主键(课程)。谢谢,有几个原因。其中一个简单的例子是:如果您希望在将来将“Math”的名称更改为“Mathematics”,那么您只需在课程表中更新它(并且只需更新一列)。如果您没有该ID,而只是使用了课程ID/名称(假设它在整个表中始终是唯一的),那么它仍然是2NF格式的。这看起来像是家庭作业。不,这个例子来自互联网,我学习如何设计数据库。你不能指望从stackoverflow学习数据库设计。参加一门课程或读一本像样的书。做你自己的家庭作业。。。尽管有人抗议,我还是闻到了家庭作业的味道。在现实生活中,没有人需要做第二个正常形式的练习。回到你的老师那里,或者张贴问题,“我认为这是2NF,因为……”。如果您不正确,老师或stackoverflow用户将帮助您。教师的工作是传授概念,而不仅仅是传授技能。如果老师教你如何铺2X2块砖,你会用2X2块砖做得很好,但用2X3块砖会失败。如果一个老师教授砌砖的概念,那么他会把所有的砖都做好。最高(1,2,3,4,5,X)范式并不适用于所有作业,重要的是了解范式的概念以及如何将其应用于情况。