数据库设计_范式理解及其它

第1范式:每个列和记录包含一个而且只包含一个值的表。

Branch(不属于1NF,第1条记录telNos有多个值)

branchNo branchAddress telNos

B001 8 504,503

B002 city 206

B003 14 216

需要拆分成2个表,符合1NF

Branch(1NF) BranchTelephone(1NF)

branchNo branchAddress branchNo telNos

B001 8 B001 503

B002 city B001 504

B003 14 B002 206

B003 216

第二范式:一个第1范式的表并且每个非主键列都可以从构成主键的全部的列映射得到。一般应用于具有复合主键的表,而具有单列主键的1NF表自动是2NF.

TempStaffAllocation( staffNo branchNO为复合主键)

staffNo branchNo branchAddress name position hoursPerWee

S4555 B002 city Ellen Ass 16

S4555 B004 16 Ellen Ass 9

S4612 B002 city Dav Ass 14

S4612 B004 16 Dav Ass 10

分析:branchAddress列的值可以仅从branchNO列映射得到。所以非2NF表。name列的值可以仅从staffNO列映射得到。所以非2NF.需要拆分表。hoursPerWee可以由主键映射得到。

Branch(2NF)

branchNo branchAddress

B002 city

B004 16

TempStaff(2NF)

staffNo name position

S4555 Ellen Ass

S4612 Dav Ass

TempStaffAllocation(2NF)

staffNo branchNo hoursPerWee

S4555 B002 16

S4555 B004 9

S4612 B002 14

S4612 B004 10

第三范式:一个已经是第一和第二范式的表,并且所有的非主键列的值都只能从主键列映射得到,而不能从其他的列得到。

staffBranch(非3NF)

staffNo name position salary branchNo branchAddr telNo

S1500 Tom Man 46000 B001 8 Way 503

S0003 Sally Ass 30000 B001 8 Way 503

S0010 Mary Man 50000 B002 City 206

S3250 Robert Super 32000 B002 City 206

S2250 Sally Man 48000 B004 16-14th 207

S0415 Art Man 41000 B003 14-8th 212

分析:branchAddress和telNo可以从branchNo映射得到,非3NF。branchNo和telNo列可以从branchAddr映射得到,非3NF。branchNo和branchAddre可以从telNo映射得到,非3NF。

范式设计不好,可能引发:1插入异常 2 删除异常 3 更新异常。这些会违背数据库ACID原则的其中的若干个。

逆规范的使用场合:若性能达不到要求,表的更新频率比较低,查询比较高,则逆规范就可行,可以加快查询速度,但会降低更新速度。逆规范是对原有表属性的修改,使得新表比原始表的范式低。

逆规范有几个要点:不分解到3NF,增加重复属性来减少连接(根据cdm关联关系),对大表要做分区。

分区有3类:范围分区(每个分区中包含一个或多个列的范围值),列表分区(每个分区中包含一列的值列表),哈希分区(根据哈希函数分解每个分区)。

需要考虑6种完整性约束:1需要的数据。2属性域约束。3实体完整性。 4 关系多样行。 5参照完整性。 6其它业务规则。

其中参照完整性需要重点考虑。还有需要正确删除cdm中的冗余关系。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24214296/viewspace-1059541/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24214296/viewspace-1059541/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值