2011-01-12 115 views
0

编辑: 将它全部放在1个大表中,并且有一个标志区分不同形式是否是一个好主意?数据库规范化

我必须建立一个5种形式的网站,也许更多。到目前为止的形式领域如下:

http://i56.tinypic.com/25it7c7.jpg http://i56.tinypic.com/25it7c7.jpg

什么是规范化这种设计的最佳方法?

我在想分裂“个人资料”分为3个不同的表: http://i53.tinypic.com/auts2h.jpg http://i53.tinypic.com/auts2h.jpg

,然后用一个ID从他人引用它们...

会认为有意义吗?它看起来像我会结束很多关系...

+0

这是一个功课题吗?如果是的话不是问题,但你应该在你的问题中提及它(而不是标签)。回到你的问题:你说你正在考虑将“个人详细信息”分成3个表格,但是你不会在你的表格图中显示这个名称的表格。你的表格图也不显示完整的列名,所以很难看到它们是否可以正常化。最后,你是否真的遵守了规范化的规则并陷入困境,还是你只是要求别人去做所有的工作?我认为你需要在你的问题上更具体。 – Tony 2011-01-12 12:18:30

+0

对不起,我现在意识到你提到的“个人详细信息”是刺激通过提取个人详细信息来规范设计的这一部分。 – Tony 2011-01-12 13:20:45

回答

2

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

因此,要回答你的问题:不,你不会像你所描述的那样通过分解一个大表来使你的数据库结构更规范化。

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

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

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