如何将其规范化为1nf?

uqjltbpv  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(385)

我试图将此表分解为1nf:

STUDENT    AGE    SUBJECT
Nancy      15     Math
Nancy      15     Bio
Peter      14     Math
Hal        17     Math

我先有一张单独的table student 以及 age ,

STUDENT    AGE
Nancy      15
Peter      14
Hal        17

我知道我应该为你安排一张单独的table subject 同样,但是如何实现这一点并使其与上一个表相关呢?

jrcvhitl

jrcvhitl1#

因为您已经在第二个表中维护了学生的元数据(比如年龄),所以不需要在第一个表中重复这些信息。因此,第一个表可以简单地如下所示:

STUDENT    SUBJECT
Nancy      Math
Nancy      Bio
Peter      Math
Hal        Math

实际上,您甚至可能不使用学生和科目名称作为这里的主键,而是使用某种类型的通用id。但是,上面的建议至少让您走上了正确的道路。

i1icjdpr

i1icjdpr2#

由于@philipxy,按照第一个范式,每个属性中的值应该是简单值(非关系值)。表中的每个属性都已具有简单值。年龄、学生、科目。所以,它已经是第一范式了。
对于更高的范式,我建议您为表定义第一个键。它将确保实体完整性得到维护。另外,为主题创建单独的表,因为它在功能上并不取决于studentid。这将避免更新主题时出现更新异常。
学生:学号,学名,年龄
主题:subjectid,subjectname
studentsubject:studentid,subjectid

相关问题