首先,要调查实际的处理流程和数据,包括所用报表和相应的处理流程, 比如, 报销把报销单装订成册保存在文件柜内三年, 等等这类细节也不要漏掉;
然后,把搜集到的材料整理成流程图(即物理流程图),和数据列表,到目前为止都要严格按照实际情况来做, 不需要考虑, 数据库系统的问题;
接下来,把物理流程图中的实体概念, 如报销单,文件夹等, 抽象成数据集,存储单元等逻辑概念, 并对流程处理作优化, 即在保证功能的前提下, 使用尽量少的处理步骤;
再之,核对数据列表, 对于意义相同的数据进行合并, 并按照机能的要求分组。 分组完成后,作ER图,并做正规化,针对每一机能, 对所做的表结构作模拟试验(在纸面上用假代码写出处理过程并预想处理结果), 根据结果对表结构作调整, 并完成机能设计书。
注意:各个表之间关连要好,不要有多余的列.模糊的列.
各个表之间的关系最好深度不要达到2层以上,否则对程序员写sql,
理解库表造成难度.
提倡“按需设计”,在经过详细有效的分析之后,在数据表中只放置必要的字段,而不要留出大量的备用字段。
当需要增加相关的信息的时候,就要具体情况具体分析:
如果数量很少,而且信息的性质与原表密切相关,那么就可以直接在原表上增加字段,并将相关的数据更新进去。
如果数量较大,或者并非是原表对象至关重要的属性,那么就可以新增一个表,然后通过键值连接起来。
对于表的数据的存储位置所导致的性能问题,我们可以通过在特定时间对数据库的数据进行重组来解决,而这项工作对于长期运行的数据库来说,也是需要定期进行的。
项目开发周期 | 数据库设计 |
需求分析 | 分析客户的业务和数据处理需求。 1. 收集信息(不怕多,但怕漏); 2. 标识对象; 3. 标识对象的属性; 4. 标识对象之间的关系; |
概要设计 | 设计数据库的E-R图,确认需求信息的正确和完整; 拆分 n: n关系(不合理)的表; |
详细设计 | 将E-R图转换为多张表,进行逻辑设计,并应用三大范式进行审核; |
代码编写 | 选择具体数据库进行物理实现,并编写代码实现前端应用; |
软件测试 | 添加测试数据进行项目测试; |
安装部署 | 对数据库进行封装; |
部分函数依赖:非主键列只依赖组合键中的一部分;
传递函数依赖:列A依赖列B,而列B依赖主键列,即:列A间接依赖主键列;
三大范式(1NF键;2NF全部键;3NF仅仅是键):
1NF:有主键,列不能再拆分;
2NF:满足1NF。若没有组合键则直接满足2NF;若有组合主键则保证没有部分函数依赖;
3NF:满足2NF。去除传递函数依赖;
衡量数据库性能的唯一标准:数据查询的速度。
反范式:为了数据规范化与数据库性能的平衡。