数据库的设计

  • 一 为什么需要规范的数据库设计
  • 数据库设计的步骤
    • 收集信息
    • 标识实体
    • 标识每个实体需要存储的详细信息
    • 标识实体之间的关系
  • 概要设计-绘制E-R图
    • 实体-关系模型
  • 数据规范化
    • 设计问题
    • 规范化设计

一 为什么需要规范的数据库设计

我们根据业务的需求可以直接创建数据库,创建表和插入测试数据,然后查询数据,为什么现在要强调先设计再创建数据库呢?原因很简单,我们在盖房的时候同样是需要图纸,才能将房子创建好。
同样的道理,在实际开发项目中,如果系统的数据存储量较大,设计的表比较多,表间的关系复杂,就需要首先考虑规范的数据库设计,然后进行具体的创建库,表工作。无论是创建动态网站,还是创建桌面窗口应用的设计,数据库设计的重要性就不言而喻了。如果设计不当会存在数据操作异常,修改复杂,数据冗余等问题,程序的性能就会受到影响。

数据库设计就是将数据库中的数据实体以及这些数据实体之间的关系,进行规划和结构化的过程。
数据库中创建的数据结构的种类,以及在数据实体之间建立的复杂关系是决定数据库系统效率的重要因素。
糟糕的数据库设计表现在以下方面:
效率低下。
更新和检索数据时会出现许多问题。
良好的数据库设计表现在以下方面:
效率高。
便于进一步扩展。
可以使应用程序的开发变得更加容易。

数据库设计的步骤

我们做项目时已经对项目的开发有一个整体的认识。项目开发需要经过 需求分析,概要分析,详细设计,代码编写,运行测试和部署上线几个阶段。下面重点说说各个阶段数据库设计的过程。
需求分析阶段:分析客户的业务和数据库处理需求。
概要设计阶段:绘制数据库的E-R图,用于在项目团队内部,设计人员和客户之间进行沟通,确认需求信息的正确性和完整性。
详细设计阶段:将E-R图转换为多个表,进行逻辑设计,确认各表的主外键,并应用数据库设计的三大规范式进行审核。经项目组开会讨论后,还需根据项目和技术实现,团队开发能力及项目的成本预算,选择具体的数据库(如MySql 或 Oracle)进行物理实现。
软件测试阶段:安装部署。

无论数据库的大小和复杂程度如何,在进行数据库的系统分析时,都可以参考下列基本步骤。
(1) 收集信息。
(2) 标识实体。
(3) 标识每个实体需要存储的详细信息。
(4) 标识实体之间的关系。

收集信息

创建数据库之前,必须充分理解数据库需要完成的任务和功能。简单的说就是需要了解数据库需要存储哪些信息,实现哪些功能。

标识实体

在收集需求分析后,必须标识数据库要管理的的关键对象和实体。实体可以是有形的,比如人或产品;也可以是无形的事物,比如部分,薪资等。在系统中标识这些实体以后,与他们相关的实体就会条理清楚。
注意实体一般是名词,一个实体只能描述一件事情,不能重复出现含义相同的实体。
数据库中的每个不同的实体都拥有一个与其相对应的表。

标识每个实体需要存储的详细信息

将数据库中的主要的实体标识为表的候选实体以后,就要标识每个实体存储的详细信息,也称为该实体的属性,这些属性将组成表中的列。简单的说就是需要细分每个实体中包含的子成员信息。

在进行实体属性分解时,含义相同的成员信息不能重复出现,如联系方式和电话等。每个实体对应一张表,实体中的每个成员对应表中的每一列。

标识实体之间的关系

关系型数据库有一项非常强大的功能,即它能够关联数据库中各个项目的相关信息。不同类型的信息可以单独存储,但是如果需要,数据库引擎还可以根据需要组合起来。在设计过程中,要累积标识实体之间的关系,首先需要分析数据库表。确定这些表在逻辑上如何相关的,然后添加关系列建立起表之间的链接。

概要设计-绘制E-R图

在需求分析阶段解决了客户的业务和数据处理需求后,就进入了概要设计阶段,我们需要和项目团队和其他成员及客户沟通,讨论数据库的设计是否满足客户的业务和数据库处理需求。和机械图一样,数据库设计也需要图形化的表达方式–E-R(entity-relationship)图,也可以称为实体-关系图。

实体-关系模型

1.实体
所谓的实体就是指现实世界中具有区分其他事物的特征或属性并与其他事物有联系的事物。
实体一般是名词,对应表中的一行数据。严格地说,实体指表中一行特定数据,但在开发时,我们也常常把整个表称为一个实体。
2. 属性可以理解为实体的特征。属性对应表中的列。
3. 联系 联系是两个或者多个实体之间的关联关系。
4. 映射基数
映射基数表示通过联系与该实体关联的其他实体个数。对实体集x和实体集y之间的二元关系,映射基数必须为下列基数之一。
–一对一:x中的一个实体最多与y中的一个实体关联,并且y中的一个实体最多与x中的一个实体关联。一对一关系也可以表示为1:1.
–一对多:x中的一个实体可以与y中任意数量的实体关联,y中的一个实体最多与x中的一个实体关联。一对多可以表示为1:N
– 多对一: x中的一个实体最多与y中的一个实体关联,y中的一个实体也可以与x中的任意数量的实体关联。客人实体和客房实体之间就是多对一的关系。
– 多对多:x中的一个实体可以与Y中的任意数量的实体关联,反之亦然。多对多关系也可以表示为 M:N。
5.实体关系图
E-R图以图形的方式将数据库的整个逻辑结构表示出来。E-R图的组成包括以下几部分。
–矩形表示实体集。
–椭圆形表示属性。
–菱形表示联系集。
–直线用来连接属性和实体集,也用来连接实体集和联系集。

数据规范化

设计问题

1 信息重复。2 更新异常 。3 插入异常(无法表示某些信息)。4 删除异常(丢失有用的信息)。

规范化设计

那么如何设计避免上面的异常呢?在数据库设计的时候,有一些专门的规则,称为数据库的实际规范。
下面将逐一讲解数据库中的著名的三大范式理论。
第一范式: 第一范式的目标是确保每列的原子性。如果每列(或者每个属性值)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式。
第二范式: 第二范式在第一范式的基础上更近一层。其目标是确保表中的每列都和主键相关。
第三范式: 在第二范式的基础上更进一层,第三范式的目标是确保每列都和主键列直接相关,而不是间接相关。如果一个关系满足第二范式,并且除了主键以外的其他列都只能依赖于主键列,列和列之间不存在相互依赖关系,则满足第三范式。

规范化和性能的关系

在设计数据库时,设计人员和客户对数据库的设计规范化和性能之间有一定的矛盾。前面我们通过三大范式分解出三个表,为了满足客户的需求,最终需要通过三个表之间的连接查询,恢复客户需要的数据结果。插入同样如此,对于客户输入的数据,我们需要分开插入到三个不同的表中。
由此可以看出,为了满足三大范式,我们的数据操作性能会受到相应的影响。所以,在实际数据库设计中,既要考虑三大范式,避免数据的冗余和各种数据操作异常;又要考虑数据访问性能。有时,为了减少表连接,提高数据库的访问性能,允许适当的数据冗余列,这可能是最合适的数据库设计方案。

本文地址:https://blog.csdn.net/qq_38269362/article/details/107280992