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

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

     102    Jerry  234 East..   555-2342   555-9854     555-2986

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

CustID  Name     Address       Phone

102 Jerry    234 East..   555-2342
102 Jerry    234 East..   555-9854
102 Jerry    234 East..   555-2986

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

设计1

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

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

设计2

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

但是,你可以走得更远:

设计3

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

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

可以是:

设计5

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等)

猜你在找的MsSQL相关文章