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

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

    前面我们了解了数据库三范式的意思,如果还没了解的话可以参看一下:数据库范式与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程序设计] 对输入文件类型的检测 1 个条目
  2. [移动开发] Android开发基础知识 4 个条目
  3. [PHP程序设计] fsockopen,curl与file_get_contents 12 个条目
  4. [智力开发与知识管理] 学习编程为什么没会这么难? 7 个条目
  5. [移动开发] 从代码角度去认识HttpClient 2 个条目
  6. [JavaScript程序设计] jQuery与表单操作 2 个条目
  7. [移动开发] ListView 使用相关问题集 1 个条目
  8. [软件工程与项目管理] 呈现器的布局与绘制 11 个条目
  9. [Python程序设计] Tornado背景知识介绍 4 个条目
  10. [JavaScript程序设计] 关于HTTP Keep-Alive 6 个条目
  11. [软件工程与项目管理] 浏览器初步介绍 8 个条目
  12. [Python程序设计] Django 入门知识浅介 10 个条目
窗口 -- [八点]