数据库设计_理论部分_设计方法设计过程
前言
对数据库设计的大致流程进行梳理,用一些典型示例帮助理解.
参考书:"<数据库原理及应用>(MySQL版)第二版".第10章部分内容
概述
数据库设计包括广义和狭义的数据库设计.广义上数据库设计是数据库及其应用系统的设计.狭义上数据库设计是设计数据库本身.做应用的数据库设计者一般是狭义的数据库设计.数据库应用系统DBMS,与操作系统及硬件的交互,被封装在软件比如MySQL中,程序员会用程序指令即可.
数据库设计要解决的问题
数据库设计一般不是一个非常结构化的过程,往往可以有多种不同方法,使用不同设计技术和工具
确定用户需求
数据库的服务一般是面向组织单位的,组织中有多种不同类型的用户,设计者必须明确他们对系统的处理功能、数据类型、数据量、数据的使用和性能要求,以及系统的各种限制.用户的需求与系统限制是整个数据库设计与开发过程的基础与出发点.
数据库与用户关系示意图
注意:对数据库访问存在限制,并不是所有用户都能无限制访问数据库的任何内容.
当前需求和新的需求
数据库或许不是一成不变的.数据库的结构及其实现不仅要满足用户的当前需求,还必须具有适应新的变化需要的灵活性.
以上图为例,数据库有内容更新(加入了新的表),或者组织中有了新的用户,都会改变原有的数据库内容.而在数据库设计之初要考虑到这些变化可能带来的影响并提前做好准备.
数据库设计方法
数据库设计的目的
1>首先,他应该能在合理的时间内以合理的工作量在给定条件下产生一个有效的数据库.
---这是站在"工程"的角度去看待数据库设计,数据库架构师需要考虑如何控制成本,进度和质量.
2>有效数据库能实现各种用户需求,满足各种限制
---数据库设计的基本要求,见上图
3>数据库以最简的数据模型表示
---尽可能减少数据冗余,但这条不是绝对,根据实际情况而定.
数据库设计的三种方法
1.基于E-R模型的数据库设计方法
概念:基本思想是在需求分析的基础上,用E-R图构造一个反映现实世界中实体与实体之间联系的概念模型,然后将此概念转换成基于某一特定的DBMS的逻辑模型.
---主流的数据库设计方法,E-R模型可以模拟出现实的实体和联系,既符合用户的阅读需要,也便于数据库设计者开展工作.E-R方法设计原理见其他贴,E-R设计步骤见参考书P252
2.基于3NF的数据库设计方法
概念:基本思想是在需求分析的基础上确定数据库模式中全部的属性与属性之间的依赖关系,将他们组织为一个单一的关系模式,然后将其投影分解,消除其中不符合3NF的约束条件,把其规范成若干个3NF关系模式的集合.
---从数据库最小单位:属性出发构建数据库.看起来他是一种"自底向上"的数据库组织方式,但在只有属性的情况下可能会造成关系模式(表)结构的不合理.
示例如下:有个属性叫"选修课成绩",目前情况学生只能选修一门课(以后可修多门)
选修课的E-R图如下:
如果是E-R模型为基础设计,他现在的关系模式(表)应如下:
学号 | 必修课一成绩 | … | 必修课n成绩 | 选修课名称 | 选修课成绩 |
以后有多门选修课(上面的E-R图右边的1改成n),他的关系模式应如下(两张表):
必修课成绩表
表一 | |||
学号 | 必修课一成绩 | … | 必修课n成绩 |
选修课成绩表:
表二 | ||
选修课名称 | 学号 | 选修课成绩 |
如果是3NF的设计模式,关系模式和最早那张表相同.
乍一看,这是需求关系没分析清楚,和设计方法的选择没有关系.是的,您的感觉是对的.但是从两者对比后发现从E-R图的角度,这个问题很容易发现出来(1:1的关系用在这里适合吗?)并及时修改.如果用3NF设计不容易察觉.当然这个例子引出的另一个问题是:需求分析很重要.
3.计算机辅助数据库设计方法
软件辅助设计数据库,相当于做了一个界面,本质上还是用E-R模型或者3NF来设计.
数据库设计方法的选择
数据库设计方法之间不是互斥的,可以互相补充.例如用E-R模型设计为主,3NF方法为辅.但从根本上来说,数据库是为了满足需求而设计.不管是E-R方法或者3NF方法,他们设计出来的表是很"干净"的,绝对满足去掉数据冗余的要求,或者满足实体-联系模型.但是不是正是客户所需要的呢?
举个例子,公司CEO除了对原材料的每日进价外,还想看每日产品的良品率,他需要的表如下:
考勤 | 原料进价 | 零件A良品率 | 产品良品率 |
每日工作汇报表 |
站在程序员的角度,从"人事部","财务部","生产部"的表中把对应数据取出来,做一张表给他.当然表的内容可以用数据库函数来做.但表的设计必须事先沟通好,不可能让用户进入3个部门自己看.
数据库设计过程
分为规划阶段,需求分析,设计,实现,测试,运行维护这6个阶段,和软件设计是对应的.
小结
数据库设计方法和设计过程的分析