1. 每个分量必须是不可分的数据项。按我的理解,就一个字段就是一种值,而不用自己再去对里面的值根据特殊符号进行解析得出更多的值来。
2. 每一个非主属性完全依赖于码,而不是部分依赖于码中的某个属性。毕竟一个码可能由几个属性组成。
3. 可以决定任意属性的因素(属性)都包含码,即每个决定因素都是码,不存在不是码但又能决定某个字段值的字段存在。
3大范式全部针对一张表(一个关系模式)。
附:
第一范式没那么玄乎,只要表的每个字段能对应成一个属性就算满足了。这点可能因为有点太基本,很多人反而不好理解。例如,一个个人资料表里面有个儿女字段,如果保存是按"张三id、李四id”;取出时自己再根据顿号分割得到两个id,那么这种情况违反第一范式,因为儿女这个字段可以再分。
至于主键,在极端情况下就是all-key,也就是全部属性合在一起构成主键。如果两行数据完全相同,那根本就算不上关系数据库了。
所以说,金融、电信类的大项目里,虽然问题很多,但基本还是符合第一范式的。因此可以算满足范式的基本要求。虽然一个字段里需要自己再根据特殊符号进行解析的事情是存在的。
范式主要还是为了解决插入和删除的异常,一般只要不是没法插入或者删除时会把共用信息也给删除,写代码的和维护的都会接受。前者在需要给出主键的值而又给不出来的时候会遇到,后者就靠冗余来补救了。至于字段很多,那估计是逐步逐步演化成那样的。用写dao的技术,形成这种局面是正常的,毕竟操作一张表即使字段和值多一些,也不一定比操作几张表来的麻烦。ms sql的update支持对联和后的表进行修改,得到很多程序员的赞许,也是因为这个道理,虽然语句长一点、字段多一点,但是一条语句就搞定了。
应该说,程序员基本遵守了第一范式,这样保证数据库可以做的下去;而弱化了主键的概念来减少自己在insert时的麻烦;delete的异常一个靠冗余,另一方面通过设置isdelete=true来解决,这样就不会真的发生删除异常;update反正更新几张表和更新多条记录比起来,在写dao的情况下,也还算凑合;至于select,冗余的查起来可能还方便。
不过有了ORM,情况就变了。agile web那本书里面并没有直接给出以数据库为主还是以object为主,但实际上由于activcerecord这个中间层存在,个人认为从哪个角度出发已经都无所谓了。而她所提供的save和分几步查询的这种方式,使得设计朝第三范式靠拢的意义变大。
从我的角度来说,我实在搞不懂什么样对象模型设计才是漂亮的,但我能鉴别的是第三范式的数据库设计确实比只符合第一范式的要漂亮。我想,这也是表驱动的一个原因。
The ubiquity of both these models (RDBMS and OOP) and the "impedance mismatch" between
them has led many people to try to bridge this gap. The software bridge that accomplishes
this is called an Object-Relational Mapper (ORM).
The library for Ruby is named after Martin Fowler's "Active Record" design
pattern. In essence, it ties database tables to classes so that the data can be manipulated
intuitively without SQL. To be more specific, it "wraps a row in a database table or view,
encapsulates the database access, and adds domain logic on that data"
Besides being a stand-alone ORM package for Ruby, Active Record is also the model part of the web-application framework Rails. Rails and Active Record are both projects conceived by DavidHeinemeierHansson and improved upon by a number of Contributors.
http://wiki.rubyonrails.org/rails/pages/ActiveRecord
分享到:
相关推荐
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多...
数据库范式理解例题数据库范式理解例题
设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式...
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多...
析取范式与合取范式
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多...
通过代码编译出的程序帮助用户求出其输入的命题公式的真值表以及主析取范式和主合取范式。 要求:能够列出含三个以内变量的合式公式的真值表,并给出相应的主析取和主合取范式。
完成乔姆斯基范式到格雷巴赫范式的转换,用C++ STL 写的,其中的字符类。 产生式类可以重用的,不过最好只是做个参照重写一个,因为我后来回过头来总结的时候发现我类接口设计的不好,特别是返回值,在别的类中...
本备忘录的状态 本文档讲述了一种Internet社区的Internet标准跟踪协议,它需要进一步进行讨论和建 议以得到改进。请参考最新版的“Internet正式协议标准” (STD1)来获得本协议的标准化程 度和状态。本备忘录的发布不...
研究生人工智能课的作业,主合取范式转主析取范式,敲了四五个小时,亲测可用,python版本的,用anaconda可直接运行,注释详细,要的自取
数据库设计的第一范式第二范式第三范式描述和实例
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入、删除和更新操作异常。第一范式:数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本...
实证主义范式自然主义范式比较.doc
利用真值表法求主析取范式与主合取范式的实现.doc
简要介绍合取范式与析取范式的求取
通俗易懂,实例讲解数据库范式,三范式,六范式 一看就明白
求公式的主合取范式和主析取范式 c++写的类
编程实现求解逻辑表达式的真值表、主析取范式、主合取范式对于一个含n个命题变元的表达式(n为相异的命题变元总个数),其真值表可看作由从0到2ⁿ-1的二进制数的变化表。因此,可以通过按行列举0到2ⁿ-1的二进制数来...
为了解决粗糙集分辨函数的计算、概念格中内涵缩减的计算、逻辑程序设计的规则简化等问题,抽象出了从合取范式到析取范式转换这一核心问题。提出了利用极小覆盖来实现从合取范式到析取范式的转换,给出了一个增量式的...
从0范式到3范式模型设计视频介绍 从0范式到3范式模型设计视频介绍 从0范式到3范式模型设计视频介绍