我试图将此表分解为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
同样,但是如何实现这一点并使其与上一个表相关呢?
2条答案
按热度按时间jrcvhitl1#
因为您已经在第二个表中维护了学生的元数据(比如年龄),所以不需要在第一个表中重复这些信息。因此,第一个表可以简单地如下所示:
实际上,您甚至可能不使用学生和科目名称作为这里的主键,而是使用某种类型的通用id。但是,上面的建议至少让您走上了正确的道路。
i1icjdpr2#
由于@philipxy,按照第一个范式,每个属性中的值应该是简单值(非关系值)。表中的每个属性都已具有简单值。年龄、学生、科目。所以,它已经是第一范式了。
对于更高的范式,我建议您为表定义第一个键。它将确保实体完整性得到维护。另外,为主题创建单独的表,因为它在功能上并不取决于studentid。这将避免更新主题时出现更新异常。
学生:学号,学名,年龄
主题:subjectid,subjectname
studentsubject:studentid,subjectid