Sql 如何将其标准化为1NF?

Sql 如何将其标准化为1NF?,sql,sql-server,database-normalization,Sql,Sql Server,Database Normalization,我试图将此表分解为1NF: STUDENT AGE SUBJECT Nancy 15 Math Nancy 15 Bio Peter 14 Math Hal 17 Math 我首先有一个单独的学生和年龄表 STUDENT AGE Nancy 15 Peter 14 Hal 17 我知道我也应该为主题设置一个单独的表,但我如何才能实现这一点并使其与前一个表相关 由于

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

STUDENT    AGE    SUBJECT
Nancy      15     Math
Nancy      15     Bio
Peter      14     Math
Hal        17     Math
我首先有一个单独的
学生
年龄

STUDENT    AGE
Nancy      15
Peter      14
Hal        17 

我知道我也应该为
主题
设置一个单独的表,但我如何才能实现这一点并使其与前一个表相关

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

STUDENT    SUBJECT
Nancy      Math
Nancy      Bio
Peter      Math
Hal        Math

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

多亏了@philipxy,根据第一个范式,每个属性中的值都应该是简单值(非关系值)。您的表已经具有每个属性的简单值。年龄、学生、科目。因此,它已经是第一个标准形式

对于更高的范式,我建议您为表定义第一个键。它将确保实体完整性得到维护。另外,为主题创建单独的表格,因为它在功能上并不取决于studentId。这将避免更新主题时出现更新异常

  • 学生:学生ID、学生姓名、年龄
  • 主题:主题,主题名称
  • 学生主题:学生ID,主体ID

学生Nancy是在学生表中重复还是不同?@HasinduDahanayake它是重复的,这就是为什么我认为原始表违反了1NF,我希望通过将其放入单独的表中使其成为1NF。所以你需要告诉我们你的定义&最好是教科书的名称和版本。PS规范化发生在1个表上。你为什么提到第二桌?你是说这是你的解决方案的一部分吗?展示你工作的所有步骤,并说明理由。非常清楚你在做什么。PS:您是在规范化该值,还是在规范化可能会调用该值的变量/模式?PS根据所有可能的定义,你的第一个变量已经在1NF中了,这是你告诉我们的,只有1个值。你的最后一个问题不清楚。“使其与上一个表相关”是不清楚的语言。您是否试图询问有关声明外键(表之间的所谓“关系(ship)”的问题?你认为这与你的标题和第一行RE1NF有什么关系?你在这篇文章中想问的第一个明确的问题是什么?第二个表是否存在与给定表的规范化无关。“规格化为1NF”并不意味着“做一个好的设计”。但这并不是指他们中的任何一个。@philipxy,谢谢。从你的回答中,我的意思是将关系分解为多个表,并规范化设计。@philipxy,同意你的说法。浏览了你的帖子。很有启发性。谢谢分享。请在博客上写下这些例子。谢谢&我很高兴我帮了忙。然而,我的观点之一是,我们不知道任何人对“1NF”的定义是什么。这里包括询问者或告诉询问者把“桌子”放进去的人。所以我们不知道他们在问什么。此外,你没有定义它的含义。因此,我对您答案的评论仍然适用。规范化从未引入新属性。