数据库设计心得(系统设计四段式)
web2f 2007-02-02 09:38:05 小弟在这里献丑了,这是小弟这两三年对数据库设计的一点体会,并经一恩师指点总改证总结出来的,这个并安恩师的法写了一下。
这里面所课的,是从一个比较大的方向出发。还望各位大哥指点
1、数据的确定性
2、数据的流通性
3、数据的事件性
4、时间的迁移性
1、数据的确定性,指所有的数据在后台一定要绝对的确定,是一种广义上的惟一性,
因为数据是不可能做到惟一的,但一定可以做到确定,但要注意,确定与惟一是不一
样的,比如说,一个学生的姓名,在你的后台库里一定是确定的,不能出现二义性,
不管有几种,他应该是确定的。
2、数据必须要有时间迁移性,比如像”学生考勤录入”:要获取学生的姓名,就应该
是传他的学生编号与时间给一存储过程,存储过程必须返回那一时刻学生的信息,比如“转班、退学、休学、或又复学”,都能在时间上体现出来,简单一句来说,你前
台读取数据时都要有时间性
好了,说归说,关键还是设计方法,设计方法是从第三点出发的,即数据的事件
性,比如客户,现在提出功能要求:设计一个系统,能实现学生的考勤信息管理,问:
你该如何进行需求分析,并进而设计这一后台局部模块,第一个当然是需求分析,但
怎么分析才最快最有价值,数据的事件性,即每一个功能模块都应该有一张核心数据
表,而核心数据表一般都是事件表,《核心事件表都是从表》,利用踢出的方法可以最
快的速度建出后台模块 ,针对这一模块就可以设想有一张核心事件表,就称为“考勤
信息明细表” 进而你就要分析,要存储考勤信息需要哪些信息,就要与客户交互,
客户虽然不一定很懂,但他一定懂自己要什么 比如我们可以问,考勤主要存哪些信
息那客户肯定会说类似的话:需要存储考勤的学期、期、任课老师、科目、旷课、迟到什么的,核心事件表最大的特征就是都有事件性:如:某年某月某时间谁发生了什么事 , 那这个模块的核心表就可以初步定为:学期、日期、节次、科目、任课老师、行为,然后再一个个字段询问是否必需或有没有少的 .
等核心表建完,再根据第一点:数据的确定性来判定字段是否要踢出,再根据数据的流通性来确定其关系,最后根据时间的迁移特征来决定是否要建迁移明细表。
最终用关系演算得出结果:如果一个模块内只包含一个核心事件表,而其余的都是逻辑主表或逻辑从表,那这一模块所任意建出的视图都是合理的。
经过实践证明,这样的方法是可以很快建出健状的后台库,稳定