Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 数据库规范化_Sql_Database_Entity Framework_Database Design_Normalization - Fatal编程技术网

Sql 数据库规范化

Sql 数据库规范化,sql,database,entity-framework,database-design,normalization,Sql,Database,Entity Framework,Database Design,Normalization,编辑: 把所有的东西都放在一张大桌子下面,并用一面旗帜区分不同的形式,这是个好主意吗 我必须建立一个有5个表单的网站,也许更多。到目前为止,表单的字段如下所示: 规范此设计的最佳方法是什么 我正在考虑将“个人详细信息”分为3个不同的表格: 然后用ID从其他人那里引用它们 这有意义吗?看起来我最终会有很多关系…规范化数据本质上意味着同一数据不会在多个地方多次存储。例如,不是将客户联系信息与订单一起存储,而是将客户ID与订单一起存储,并且客户的联系信息与订单“相关”。当客户的电话号码更新时,只

编辑: 把所有的东西都放在一张大桌子下面,并用一面旗帜区分不同的形式,这是个好主意吗

我必须建立一个有5个表单的网站,也许更多。到目前为止,表单的字段如下所示:

规范此设计的最佳方法是什么

我正在考虑将“个人详细信息”分为3个不同的表格:

然后用ID从其他人那里引用它们


这有意义吗?看起来我最终会有很多关系…

规范化数据本质上意味着同一数据不会在多个地方多次存储。例如,不是将客户联系信息与订单一起存储,而是将客户ID与订单一起存储,并且客户的联系信息与订单“相关”。当客户的电话号码更新时,只有一个地方需要更新电话号码(客户表),所有订单都将具有正确的信息,而无需更新。每一条数据都存在于一个且仅存在于一个位置。这是标准化数据

所以,为了回答您的问题:不,您不会像前面描述的那样通过分解一个大表来使数据库结构更加规范化

将一个表拆分为多个表的原因通常是为了创建一对多关系。例如,一个人可能有多个电子邮件地址。或多个物理地址。分解表的另一个常见原因是使系统模块化,这样可以创建连接到现有表的表,而无需修改现有表

将一个大表拆分为多个小表,并在它们之间建立一对一的关系,并不会使数据更加规范化,只会使您的查询更难编写。*而且除非有充分的理由,否则您不希望围绕接口(表单)构建数据库设计。通常没有


*尽管有时有很好的理由分解大型表并创建一对一关系,但规范化不是其中之一。

这是一个家庭作业问题吗?如果是的话这不是问题,但是你应该在你的问题中提到它(不是标签)。回到您的问题:您说您正在考虑将“个人详细信息”拆分为3个表,但在表关系图中没有显示具有该名称的表。表关系图也不显示完整的列名,因此很难看到它们是否可以正常化。最后,你是否真的遵循了正常化的规则,并陷入了困境,或者你只是要求其他人做所有的工作?我认为你的问题需要更具体。对不起,我意识到你提到的“个人细节”是通过提取个人细节来规范设计的一部分。是的,对不起,这就是我的意思。。。因此,现在我在UserDetails上添加了对UserContactDetails和UserPersonalDetails的引用,并从其余表中删除了所有“个人详细信息”。不应基于应用程序的哪些“表单”需要这些信息来执行规范化。例如,UserDetails中的一行是否会引用UserPersonalDetails中的多行?如果是,您在年龄字段中有重复的信息。如果每个UserDetails只有一行,那么这些字段可以移到UserDetails表中。一句话:不。也许您需要的帮助比StackOverflow合理预期的要多。如果您没有设计数据库的经验,那么最好雇佣其他人来完成这项工作。好的数据库设计与表单或用户界面无关。除非并且直到你理解了你正在做的事情的基本原理,否则你不太可能在这方面取得成功。你的陈述“根据定义,一个表是标准化的。”是不正确的。考虑此例中所示的表()它是单个表,但甚至不符合1NF.谢谢。我试图提供一个概述(因为这张海报对这个想法来说似乎是新的),但我的陈述太宽泛了。我更新了我的答案。