Chinaunix首页 | 论坛 | 博客
  • 博客访问: 79562
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 340
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-02 20:25
文章分类

全部博文(31)

文章存档

2015年(2)

2014年(29)

我的朋友

分类: Mysql/postgreSQL

2014-08-27 20:48:58

     表设计是数据库优化中相当重要的一步,良好的表结构是后续优化的前提。表设计包括遵循NF,字段类型选择等。

1. 通常要满足3NF,但为了性能可以打破这个规律,增加适当冗余。
2. 1NF要求属性不可分割,这个概念模拟两可。可以认为所有的表都自动满足1NF,也可以认为某些表不符合1NF,角度不同而已。
  ex: sc(sno,cno) 学生选课表,(1, ch|en|math)。有谁能说这一定不符合1NF呢。属性值用连接符连接的实例太多了,如果这不符合1NF。那何谈2NF.
3. 2NF要求非主属性完全依赖于主属性,要求记录具有唯一性。比如sc(sno,cno,cscore),这里主键为(sno,cno),cscore表示学分他只依赖于cno,不符合2NF。
4. 3NF要求非主不传递依赖于主。ex:Stu(学号,系,系地址)。这表满足2NF,  但
,系地址-->系-->学号. 也就是每个字段要直接依赖于主关键字。
5. 不满足2NF,3NF会存在更新异常,插入异常,删除异常。比如在sc(sno,cno,cscore)修改一个课程的学分,要改的记录实在太多。
6. 定长表的性能更有优势,属性的平均长度差不多的情况下优先选择定长。
7.enum可用程序实现
8.NULL要尽量避免,null可索引,但需要更复杂的处理。
9.字段类型在符合业务要求前提下,暂用空间越少越好。定长非定长要额外考虑

阅读(886) | 评论(0) | 转发(0) |
0

上一篇:5. 重复数据

下一篇:7.事务

给主人留下些什么吧!~~