数据库设计 – 数据库设计:第一个正常格式和重复组

前端之家收集整理的这篇文章主要介绍了数据库设计 – 数据库设计:第一个正常格式和重复组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
要遵守第一正常形式,您必须避免的事情之一是重复组.像代替: @H_404_2@CustID Name Address Phone1 Phone2 Phone3 102 Jerry 234 East.. 555-2342 555-9854 555-2986

你应该创建一个第二个电话号码表,然后在你将得到的一个连接:

@H_404_2@CustID Name Address Phone 102 Jerry 234 East.. 555-2342 102 Jerry 234 East.. 555-9854 102 Jerry 234 East.. 555-2986

有时,这有点更加含糊,很难说一群列的头衔是否符合条件.例如,假设你现在有两个测试,每个硬件上运行.而您的第一个DB设计产生了最为横向的方法

设计1

@H_404_2@SN Test1_Max Test1_Min Test1_Mean Test2_Max Test2_Min Test2_Mean 2093 23 2 15 54 -24 45

显然,这是一个重复的组,可以更容易地被表示为(在“零件”和“测试”之间的连接):

设计2

@H_404_2@SN Test Max Min Mean 2093 1 23 2 15 2093 2 54 -24 45

但是,你可以走得更远:

设计3

@H_404_2@SN Test Statistic Value 2093 1 Max 23 2093 1 Min 2 2093 1 Mean 15 2093 2 Max 54 2093 2 Min -24 2093 2 Mean 45

设计3是否必要?你如何决定如何垂直呢?设计2和3之间的优缺点是什么?似乎可以使用sql轻松选择或者加入两者,具有给予Design 3的优势,因为您可以轻松添加新的统计信息,而无需实际修改表结构.

但是在任何人都说,越垂直越好,有时候它更加模糊.喜欢:

设计4

@H_404_2@SN AverageCurrent (mA) BatteryCapacity (mA) 2093 200 540

可以是:

设计5

@H_404_2@SN mA_Measuremnt Value 2093 AverageCurrent 200 2093 BatteryCapacity 540

虽然这两个属性都是相同的域(毫安),它们代表与组件非常不同的东西.在这种情况下,设计4是否更好,因为它不是严格的重复组?我想我正在寻找的是一些标准,知道什么时候将它分解成更多的表,从而使它更垂直.

总结一下这个荒谬的漫长问题,如果你们重复的域是相同的域,并且具有完全相同的含义,那么你应该只删除和规范重复的组.如果是这样的话,那么真正只有电话的例子,可能是设计1中的两个测试才符合这个标准.虽然设计3和5似乎可能具有设计优势,尽管设计3的统计数字严格来说具有不同的含义,而平均电流和电池容量在设计5中绝对具有不同的含义.

解决方法

如果结果不总是存在(也称为Desigin 1中的空值),则设计2和设计4是最好的方法.如果他们总是被拿走,那么第一个设计是好的.

我相信在sql中重复组实际上是如果你有一个填充了add’l值的列,例如Phone_Number包含“123-444-4444,123-333-3334”等

无论如何,后来的设计是次优的 – 您将继续将其置于最终级别,并拥有“一个真正的查找表”http://www.dbazine.com/ofinterest/oi-articles/celko22或实体属性http://tonyandrews.blogspot.com/2004/10/otlt-and-eav-two-big-design-mistakes.html

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:10678084117056

无论如何,这几乎总是一件坏事.虽然它们可能共享一个通用的数据类型/域,但是它的含义是不同的,因此它们应该保留个别属性(maxtemp,mintemp等)

原文链接:https://www.f2er.com/mssql/82371.html

猜你在找的MsSQL相关文章