数据库设计就是将数据库中的数据实体及这些数据实体之间的关系,进行规划和结构化的过程。
设计数据库的重要性
数据库中创建的数据库结构的种类,以及在数据实体之间建立复杂关系是决定数据库系统效率的重要元素。
优先的数据库设计表现在以下方面:
1.高效率
2.便于进一步扩展
3.使应用程序的开发变得更容易
设计数据库的步骤
需求分析阶段:此阶段主要分析客户的业务和数据处理的需求。
概要设计阶段:可以绘制数据库E-R图,用于在项目沟通,确认需求信息的正确性和完整性。
详细设计阶段:将E-R图转换为多张表,进行逻辑设计,确认各表的主外键,并应用数据库的三大范式进行审核。根据开发能力及项目的成本预算,进行实现。
基本步骤一般分为:
1.收集信息:创建数据库之前,需要理解数据库所需要完成的任务和功能。简单理解,就是了解数据库需要储存那些信息(数据),充分实现那些功能。
2.标识实体:收集需求信息后,必须标识数据库要管理的关键对象或实体。实体可以是有形的事物,如人或商品:也可以是无形的事物,
3.标识每个实体需要储存的详细信息:将数据库中的主要实体标识为表的候选实体以后,就要标识每个实体存储的详细信息,也称为该对象的属性,属性将组成表中的列。简答说,就是需要细分出每个实体中包含的子成员信息。
如下图:
4.标识对象之间的关系:关系型数据库有一项非常强大的功能,它能够关联数据库中各各项目的相关信息。不同类型的信息可以单独储存,但数据库引擎也可以更具需要将数据库组合起来。
数据库的设计问题:
1.信息重复:
列中有重复的信息。如菜单列中有“番茄炒蛋”和“西红柿炒蛋”。信息重复会造成储存空间的浪费问题。
2.更新异常:
冗余信息浪费空间,还会增加更新的难度。
3.插入异常(无法表示某些信息)
4.删除异常(丢失有用信息):
在某些情况下删除一行时,可能会丢失有用的信息。
规范设计:
1.第一范式
第一范式(1NF)的目标是确保每列的原子性。如果每列(或者每个属性值)都是不可在分的最小数据单元(也称为最小的原子单元),则满足第一范式。
简单来说就是:将列设为,不能在分的最小数据单元。
2.第二范式
第二范式(2NF)在第一范式的基础上更近一层,其目标是确保表中大的每列都和主键相关。如果满足于第一范式(1NF),并且除了主键以外的其他列都全部依赖于该主键,则满足第二范式(2NF)。
简单来说第二范式就是让列都依赖于主键。
3.第三范式
第三范式(3NF)在第二范式的基础上更进一层,第三范式的目标是确保每列都和主键列直接相关。如果一个关系满足第二范式(2NF),并且除了主键以外的其他直接相关,而不是间接相关。如果一个关系满足第二范式(2NF),并且除了主键以外的其他列都只能依赖于主键列,列和列之间不存在相互依赖关系,则满足第三范式(3NF)。
简单来说第三范式就是让列都依赖主键之间不存在相互依赖关系。
//为了提高数据库的访问性能,允许适当的数据冗余列。