数据库设计
成熟的数据库设计套路,其实数据库设计也是一门学问,看起来简单,真正想设计好也需要有硬功夫,也需要手艺精湛、技艺高超的。数据库基本上还是目前开发各种管理系统必不可少的组成部分,甚至现在还是稳定的管理信息系统的基石,所以数据库设计是否合理、至少30-40%的项目是否顺利稳定的分量是有的。
一命名规则
(1) 命名富有意义英文词汇,多个单词组成的,中间以下划线分割。
(2) 除数据库名称长度为1-8个字符,其余为1-30个字符,dblink名称也不要超过30个字符。
(3)命名只能使用英文字母,数字和下划线,字母全部小写
(4)避免使用Oracle,mysql的保留字如level、关键字如type。
二 三大范式
1 消除一个字段包含多个数据库值,消除一个记录包含重复的组(单独的一列包含多个项目),即可满足1NF。符合1NF的关系中的每个属性都不可再分。如下表所示的情况,就不符合1NF的要求1
2 消除部分依赖性即可转化为2NF。部分依赖性表示一个记录中包括的字段只依赖于主键的一部分。解决部分依赖性的最简单方法是将复合主键分成两部分,每一部分表示一个单独的表。其改进是,2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。接下来对这句话中涉及到的四个概念——“函数依赖”、“码”、“非主属性”、与“部分函数依赖”进行一下解释。
3 消除可传递依赖性即可满足3NF。可传递依赖性表示记录中至少一个值不依赖主键,而是依赖于这个记录中的另一个字段。
符合3NF要求的数据库设计,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。当然,在实际中,往往为了性能上或者应对扩展的需要,经常 做到2NF或者1NF,但是作为数据库设计人员,至少应该知道,3NF的要求是怎样的。
三大范式的解释:
1 就是在一个字段中,是最小单位不可以分,如果一个字段可以分为两个字段,那么设计就不是很合理
2 所有外表只可以与主键关联,因为是唯一字段,这样避免了其他的问题,
3 依赖传递,不可以多张表相互关联,这样会造成依赖传递,造成问题,应该所有的跟主表进行关联,怕造成不必要的麻烦
三 反范式:
没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,减少了查询时的关联,提高查询效率,因为在数据库的操作中查询的比例要远远大于DML的比例。但是反范式化一定要适度,并且在原本已满足三范式的基础上再做调整的。
四:数据模型
数据库结构的基础是数据模型,是用来描述数据的一组概念和定义。
数据模型三要素是数据结构、数据操作、数据的约束条件。
E-R模型:是实体-联系模型的简称。所采用的3个主要概念是实体、联系、属性。
实体:现实世界中可以区别其它对象的物体或事件。
联系:实体的联系分为实体内部的联系和实体与实体之间的联系。
两个不同实体之间的联系:
(1)一对一:指实体集E1中的一个实体最多只与实体集E2中的一个实体相联系。(1:1)
(2)一对多:表示实体集E1中的一个实体可与实体集E2中的多个实体相联系。(1:N)
(3)多对多:表示实体集中E1中的多个实体可与实体集E2中的多个实体相联系。(M:N)
两个以上不同实体集的联系:
两个以上不同实体集之间存在1:1:1、1:1:N、1:M:N和R:M:N
同一实体集内的二元联系:
同一实体集内的各实体之间也存在1:1、1:N和M:N的联系。
属性是实体某方面的特性。
派生属性可以从其它属性得来,例如:参加工作时间和工作年限,工作年限可以从当前时间和参加工作时间得到,这里工作年限就是一个派生属性。
概念模型中最常用的方法是实体-联系法,简称E-R方法。
扩充的E-R模型:
弱实体:这种实体对另一些实体有着很强的依赖关系,即一个实体的存在必须以另一个实体为前提。例如职工与家属的关系。
特殊化:一个实体集可以按照某种特征区分为几个子实体。例如:学生实体集可以分为研究生、本科生、大专生。我们称这种过程为特殊化,反之叫普遍化。
层次模型:采用树形结构表示数据与数据之间的联系。
网状模型:采用网状结构表示数据与数据之间的联系。
关系模型:在关系模型中以表格结构表达实体集,以及实体集之间的联系。
关系代数:
笛卡尔积:D1={0,1}、D2={a,b}。D1*D2={0,a}{0,b}{1,a}{1,b}。
关系的3种类型:
基本关系:实际存在的表,是实际存储数据的逻辑表示。
查询表:查询结果对应的表。
视图表:由基本表或其它视图表导出的表,由于它本身不独立存储在数据库中。数据库只存放它的定义,所以常称为虚表。
完整性约束:
完整性规则提供了一种手段来保证授权用户对数据库操作修改时不会破坏数据的一致性。
关系的完整性分为3类:
(1)实体完整性:规定基本关系R的主属性A不能取空值。
(2)参照完整性:在关系模型中实体与实体间的联系是用关系来描述的。这样自然就存在着关系与关系间的引用。
(3)用户定义完整性:反映某一具体应用所涉及的数据必须满足的语义要求,由应用环境决定。
5种基本的关系代数运算:并、差、广义笛卡尔积、投影、选择。
扩展关系运算:交、连接、除、广义投影、外连接。
SQL支持三级模式结构:视图对应外模式,基本表对应模式,存储文件对应内模式。