• 对数据库范式的一些理解

    使用但是不死板
    服务器君一共花费 13.051 ms 进行了 4 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    前面我们了解了数据库三范式的意思,如果还没了解的话可以参看一下:数据库范式与3NF的简单介绍。这里再简单总结一下:

    范式的说明

    • 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解。通俗的理解是字段还可以再分吗?如过不能,则是符合1NF的设计。
    • 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性。简单的解释,比如你和一个女生约会建立一张表,不用每条约会记录都记录她的身高、体重,将身高体重单独的存在一张表中供查询即可。
    • 第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。打个比方,比如评论表,如果你将用户ID,用户头像都放在这留言表中,就是不合适的了。用户头像是依赖于用户ID,而不依赖该评论。

    关于反3NF。没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。

    对范式的一些理解

    一个严格恪守数据库设计范式来进行数据库设计的人,必定是个傻球。

    一个没有研究过数据库设计范式就进行数据库设计的人,必定也是个傻球。

    在现代数据库设计中,尤其是web 2.0的系统中的数据库设计,我可以断言,大多数都是违反2NF、3NF的,少数设计甚至是违反1NF的。数据库设计范式只是对数据库惯用设计的一些说明,并不能定性为标准。

    而从数据库的发展来看,以MySQL举例,随着MySQL实现越来越多的功能,它的宣传材料上会越来越多的出现以前被MySQL所摒弃的复杂设计理念,并且宣称这是MySQL所独创或一贯倡导的。这是一个数据库系统发展所必然经历的过程。而这却会给MySQL的使用者以极大的误导,从而忽视了是否新特性是业务所真正需要的。

    数据库设计不是一种编程语言这么简单,与面向对象、面向过程无关。数据库设计代表的是一种与应用开发语言完全不同的思想。现在绝大多数的程序,无论任何人采用什么方式进行程序开发,其最终还是会回归到对数据库的操作上(当然如果你的程序只是个教学演示则不在此范围内)。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [PHP程序设计] htaccess 设置技巧 6 个条目
  2. [PHP程序设计] 命令式编程范式 6 个条目
  3. [移动开发] 刷机与root相关 2 个条目
  4. [移动开发] 使用support-v7 ActionBar前的那些坑 3 个条目
  5. [数据结构] 散列表(哈希表) 13 个条目
  6. [Python程序设计] Tornado源码解析 23 个条目
  7. [PHP程序设计] PHP数组的遍历 7 个条目
  8. [数据库技术] MySQL常用自带函数 3 个条目
  9. [数据库技术] MySQL中英文混合排序 4 个条目
  10. [Python程序设计] Tornado 服务器环境配置 3 个条目
  11. [PHP程序设计] Nginx基本操作释疑 7 个条目
  12. [数据库技术] 无限级分类数据表设计 4 个条目
窗口 -- [八点]