工具或网站,以帮助数据库规范化

时间:2010-02-10 05:10:38

标签: sql normalization

是否有任何工具或在线资源(FREX教程)可以帮助初学者进行数据库规范化?

7 个答案:

答案 0 :(得分:7)

An Introduction to Database Normalization

维基:Database normalization

Database Normalization Tips

  

实现精心设计的数据库在关系数据库设计理论中,   规范化规则确定某些   必须存在的属性或   缺乏精心设计的数据库。   有一些规则   可以帮助您实现健全的数据库   设计:

     
      
  • 表格应具有标识符。数据库的基本规则   设计理论就是每一张表   应该有一个唯一的行标识符,a   用于的列或列集   区分任何单一记录   表中的每一条记录。每   table应该有一个ID列,没有   两条记录可以共享相同的ID   值。一列或多列服务   作为a的唯一行标识符   table是主键   表。在AdventureWorks数据库中,   每个表都包含一个标识列   作为主键列。对于   例如,VendorID是主键   Purchasing.Vendor表。

  •   
  • 表格应仅存储单一类型实体的数据。尝试去   在表格中存储太多信息   可以阻碍高效和可靠   管理表中的数据。   在AdventureWorks示例数据库中,   销售订单和客户   信息存储在单独的   表。虽然你可以有专栏   包含两者的信息   销售订单和客户   单表,这种设计导致   几个问题。客户   信息,名称和地址必须是   为每个人添加和存储冗余   销售订单。这使用额外的   数据库中的存储空间。如果一个   客户地址变化,变化   必须为每个销售订单制作。   另外,如果是最后一个销售订单   客户被从中移除   Sales.SalesOrderHeader表,   该客户的信息丢失。

  •   
  • 表格应该[尝试]避免可以为空的列。表可以有列   定义为允许空值。一个   null值表示没有   值。虽然它可能有用   允许隔离的空值   在这种情况下,你应该谨慎使用它们。   这是因为它们需要特殊的   处理会增加复杂性   数据操作。如果你有   有几个可空列的表   并且几个行都为null   你应该在列中的值   考虑将这些列放入   另一个链接到主要表   表。通过将数据存储在两个中   单独的表,主表可以   设计简单,仍然可以处理   偶尔需要存储这个   信息。

  •   
  • 表格不应包含重复值或列。表格为   数据库中的项目不应该   包含a的值列表   具体的信息。对于   例如,一个产品   AdventureWorks数据库可能是   从多个供应商处购买。如果   在列中有一列   Production.Product表的名称   对供应商而言,这会产生问题。   一种解决方案是存储名称   列中的所有供应商。然而,   这使得显示列表变得困难   各个供应商。另一个   解决方案是改变结构   要为其添加另一列的表   第二个供应商的名称。   但是,这只允许两个   供应商。另外,另一栏   如果一本书有三本书,必须加上   供应商。如果你发现你必须这样做   将值列表存储在一个列表中   列,或者如果你有多个   单个数据的列,   例如TelephoneNumber1,和   TelephoneNumber2,你应该考虑   将重复的数据放入另一个   带有返回主要链接的表   表。 AdventureWorks数据库有   产品的Production.Product表   信息,Purchasing.Vendor表   供应商信息,第三个   table,Purchasing.ProductVendor。这个   第三个表只存储ID值   对于产品和的ID   产品供应商。这个设计   允许任意数量的供应商   产品没有修改   表的定义,没有   为...分配未使用的存储空间   单一供应商的产品。

  •   

Ref

答案 1 :(得分:5)

你不应该使用工具的想法只是一种轻率的意识形态。数学家使用计算器虽然他们可以自己完成所有的计算。 NORMA很好,我会从那开始。

答案 2 :(得分:4)

我使用NORMA进行概念数据库设计。一个副作用是它为正确规范化的数据库生成模式。

答案 3 :(得分:2)

最好的解决方案是,您应该能够完全理解如何规范化表单,您需要多长时间才能依赖任何工具为您执行此操作?我建议你 study a bit about it ,这样你就可以自己想出最好的解决方案。作为一名开发人员,你会时不时地面对这一点,那么面试时,我们假设你被问到这个问题?正如Mitch Wheat所说,标准化不应该需要一个工具:)

以下是一些可以让你盯着看的资源:

http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html

来源:Mysql网站(官方)

答案 4 :(得分:2)

作为初学者,我使用了Relational Database Design

相信我很棒! (因为它有效并且不需要任何先决条件,即初学者的理想选择)。在第4页,它涵盖了规范化。

答案 5 :(得分:1)

1:不要听任何告诉您规范化不需要工具的人,因为发表此类评论的任何人都不理解这个问题。

2:“正常形式”最好被视为数据库设计质量的衡量标准。例如,较高正常形式的数据模式具有较少的数据冗余,并且不易更新异常 - 这意味着您的应用程序需要较少的程序代码。

3:因此,如果规范化至关重要,那么最好的方法是什么?

关于这一点有很多叙述,所以我只提两个:

方法1:功能分解(FD) 现在情况是,至少有一位着名的大学教授教授FD方法。观看此视频:“Stanford University Video on functional decomposition”。 不幸的是,(并且抱歉Jennifer),但功能分解非常复杂,容易出错,在我看来,完全不可行。 (例如,你如何首先找出正确的“Mega”关系?)

方法2:使用NORMA工具自动生成第5个普通表单模式。 NORMA工具免费,它在Visual Studio 2013的免费版本上运行。 您可以在my website.

上详细了解相关信息

快乐的模特。

PS我已经使用对象角色建模方法超过20年了。

答案 6 :(得分:0)