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
分享到:
相关推荐
【标题】:“备忘录.NET C#” 在.NET框架中,使用C#语言开发备忘录应用程序是一项常见的任务,这涉及到构建一个用户友好的界面,用于记录、存储和提醒用户重要事项。C#语言的强大特性和.NET Framework提供的丰富...
《企业备忘录管理系统——C++与SQL Server的完美结合》 在当今信息化时代,企业的日常运作离不开各种信息管理工具。本文将详细探讨一个由C++编程语言与SQL Server数据库系统共同实现的企业备忘录管理系统,它为中小...
【标题】"备忘录代码"指的是一个编程项目,它实现了备忘录功能。备忘录应用程序是常见的软件工具,允许用户记录、存储和管理日常生活中的待办事项、提醒和其他重要信息。在这个“beiwanglu.rar”压缩包中,包含的...
《家庭备忘录管理系统——基于数据库的实现》 在当今快节奏的生活中,管理家庭事务变得日益重要。"Ex_family_10.rar_Typeset.h_family_备忘录" 提供了一个高效的家庭备忘录管理系统,它利用数据库技术,帮助用户...
Oracle数据库工作备忘录 Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统,由甲骨文公司(Oracle Corporation)开发。它以其高效、稳定和强大的功能著称,被广泛应用于金融、电信、政府和各类企业的...
基于Android的多媒体备忘录设计与实现的知识点主要包括以下几个方面: 1. 多媒体备忘录的设计背景:随着智能手机的普及和人们生活节奏的加快,传统的备忘录功能已不能满足用户的多样化需求。例如,内容单一、功能...
- 基于这个模型,建立了满足第三范式的数据库关系描述,包括个人信息、备忘录、通讯录、日记和财务管理的实体。 - 每个实体转换为一个关系,如个人信息表、备忘录表、通讯录表、日记表和财务管理表,确保所有关系...
- **关系描述**:将E-R图转化为关系数据库,包括用户信息、日志、通讯录、备忘录和财务管理五个关系,并确保满足第三范式,避免数据冗余和更新异常。 5. **数据库逻辑设计**: - **关系规范化**:确保每个关系...
将满足第三范式的各个关系转化为数据库中的数据表,包括用户信息表、日志表、通讯录表、备忘录表和财务管理表。每个表包含相应的字段,如用户信息表有用户ID、姓名、年龄、出生日期等字段。 6. 数据库物理设计 选用...
本系统采用Java Server Pages (JSP) 技术进行开发,旨在为用户提供一个集个人信息管理、备忘录、通讯录、日记及财务管理于一体的全方位服务平台。 1. 系统业务流程与功能分析 系统的业务流程始于用户登录或注册。...
个人信息、备忘录、通讯录、日记和财务管理五个实体被定义,每个实体对应一个数据表,如用户信息表包含用户ID、密码、姓名、年龄等字段,满足第三范式要求,确保数据的一致性和完整性。 数据库逻辑设计将这些关系...
登录成功后,用户将进入系统主界面,这里提供个人信息管理、备忘录管理、通讯录管理、日记管理和财务管理等多个功能模块。用户可对这些模块中的信息进行添加、修改、删除和查询操作。当用户选择退出系统时,系统会...
2. **系统数据库设计**:在需求分析阶段,通过E-R图建立了概念模型,并转换为满足第三范式的多个关系,包括个人信息、备忘录、通讯录、日记和财务管理的实体关系。这些关系经过规范化,确保满足第三范式,避免了数据...
- 数据表:备忘录、目录、存放关系、标签、备忘录标签关系。 9. **股票软件**: - 数据需求:公司信息、实时交易数据、每日交易信息、K线图。 - 数据表:股票信息、交易数据、K线图记录。 在设计这些数据库时,...
- **关系描述**:根据E-R图,转换为满足第三范式的数据库关系,例如个人信息表、日志表、通讯录表、备忘录表和财务管理表。 - **规范化**:所有关系满足第三范式,不存在非主属性对关键字的部分依赖。 5. **...
本文将详述一个基于JSP技术的个人信息管理系统的设计与实现,系统主要涵盖了个人信息管理、备忘录管理、通讯录管理、日记管理和财务管理五大功能模块,旨在提供用户一个全面、便捷的信息管理平台。 1. **系统业务...
该系统涵盖了多个功能模块,包括个人信息管理、备忘录管理、通讯录管理、日记管理和财务管理,为用户提供了一个集中化的信息存储和处理平台。 在业务流程分析方面,用户首先需要通过登录界面输入账号和密码来访问...
- **备忘录管理**:用户可以添加、编辑或删除备忘录条目,每条备忘录包含时间、地点等信息。 - **通讯录管理**:维护联系人信息,包括姓名、电话号码、工作地点等。 - **日记管理**:记录用户的日常生活,包括...