数据库设计
定义: 指的是将应用中涉及的数据实体及这些数据实体 之间的关系,进行规划和结构化的过程。
影响数据库系统效率的因素:数据库中创建的数据结构种类,以及在数据实体之间建立的关系
好的设计:效率高,便于进一步扩展,使应用程序的开发变得容易
糟糕的设计:效率低下,更新和检索数据时会出现许多问题。
一、设计的步骤:
一般在项目开发需要经过:需求分析、概要设计、详细设计、代码编写、运行测试和部署上线这几个阶段,而数据设计在这几个阶段主要做的事,如下:(当然上线后有时也会出现改需求,动代码动数据库 )
//数据库设计时需要注意的 需求分析阶段:分析客户业务和数据处理需求 概要设计阶段:绘制数据库的E-R图,用于在项目团队内部、设计人员和客户之间的沟通,确认需求信息的正确性和完整性。 详细设计阶段:将E-R 图转换为多张表,进行逻辑设计,确认各表的主外键,并应用数据库设计的三大范式进行审核。
经项目开会讨论确定后,根据项目的技术实现、团队开发能力进行项目的成本预算,选择具体的 数据库进行物理实现,之后就是开发应用程序
注意:
在需求分析阶段的重点是调查、收集并分析客户业务的数据需求、处理需求 、安全性与完整性需求。
常用的需求调研方法:在客户的公司跟班实习、组织召开调查会、邀请专人介绍、设计调查表并请用户填写和查阅与业务相关的数据记录等。
常用的需求分析方法:调查客户的公司组织情况、各部门的业务需求情况、协助客户分析系统的各种业务需求和确定新系统的边界。
//在进行数据库系统分析时可参考的基本步骤 1、收集信息:创建数据库之前,必须充分理解数据库需要完成的任务和功能,了解数据库需要存储哪些数据、实现哪些功能 2、标识实体:收集信息后,标识数据库要管理的关键对象或实体。
(实体一般是名词,一个实体只描述一件事情,不能出现含义相同的实体,而且实体可以是有形的事物(如人或产品),也可以是无形的事物(如部门,时间))
3、标识每个实体需要存储的详细信息:将数据库中的主要实体标示为表的候选实体以后,就要标识每个实体存储的详细信息,也称为该实体的属性,这些属性将组成表中列。
注意:在进行实体属性分解是,含义相同的成员信息不能重复出现(如联系方式与电话)
每个实体对应一个表,实体中的每个属性对应表中的每一列 4、标识实体之间的关系: 关系型数据库的一个强大功能,可以关联数据库中各个项目的相关信息。不同类型的信息可以单独存储,当需要的时候,数据库引擎还可以根据需要将数据组合起来。
在设计过程中,要标识实体之间的关系,首先需要分析数据库表,确定这些表在逻辑上是如何相关的,然后添加关系列建立起表之间的连接,
总的来说就是了解需求分析信息确定需要哪些表,在确定各个表中需要哪些列,以及各个表之间的关系
实现思路:
收集信息:确定客户需要做什么之后,收集一切相关的信息,尽量不遗漏任何信息
标识实体(确定表):原则是实体一般是名词,一个实体只能描述一件事,不能重复出现含义相同的实体
标识每个实体属性(确定列):确定每个实体需要存储哪些信息
标识各个实体之间的联系(确定表之间的关系)
二、E-R 图(Entity-Relationship):也称为实体-关系图 ,用于和项目团队的其他成员及客户沟通,讨论数据库设计是否满足客户的业务和数据处理需求,主要由一些含有特殊含义的图形符号构成
其中:
1、实体:指现实世界中具有区分其他事物的特征或属性并与其他事物有联系事物。
实体一般是名词,对应表中的一行数据
2、属性:实体的特征
属性对应表中的列
3、联系:指两个或多个实体之间的关联关系
实体用矩形表示,一般是名词
属性用椭圆形表示,一般也是名词
联系用菱形表示,一般是动词
4、映射基数:表示通过联系与该实体关联的其他实体的个数。
对于实体集X与Y之间的关系有以下四个:一对一、一对多、多对一、多对多
一对一:X中的一个实体最多与Y中的一个实体关联,并且Y中的一个实体最多与X中的一个实体关联。
一对多:X中的一个实体可以与Y中的任意数量的实体关联,Y中的一个实体最多与X中的一个实体关联
多对一:X中的一个实体最多与Y中的一个实体关联,Y中的一个实体可以与X中任意数量的实体关联
多对多:X中的一个实体可以与Y中的任意数量的实体关联,Y中的一个实体可以与X中任意数量的实体关联
5、实体关系图
//E-R图 矩形表示实体 椭圆形表示属性 菱形表示联系集 直线用来连接属性与实体集,实体集与联系集,直线也可以是有方向的 (在末端有一个箭头),用来表示联系集的映射基数,箭头可以视为指向引用的实体。
主要就是三种方式:一对一( 1:1)、一对多(1:N)、多对多(M:N)
三、关系数据库模式
关系数据库模式是对关系数据库结构(或框架)的描述,一个关系通常对应一个表。
(关系模型: 指使用二维表的形式表示实体和实体间联系的数据模型)
关系模式 的表现形式有:R(U) 或 R(A,B)
其中,R表示关系名,U表示属性集合,A,B 代表U中的属性
1、将E-R 图转换为关系模式的步骤
(1)、将实体转化为关系模式的R(A,B...)形式
如上述的:供应商,商品
供应商(供应商编码,供应商名称,类型,联系方式、地址)
商品(商品编码,商品名称,类型,单价,数量)
(2)、建立实体间联系的转换(一对一,一对多,多对多)
当两个实体各自转化为 关系模式后,实体间联系的转换
一对一的转换:把任意实体的主键放到另一实体的关系模式中
一对多的转换:把联系数量为1的实体的主键,放到联系数量为N 的实体关系模式中
多对多的转换:把两个实体中的主键和联系属性放到另一个关系模式中,需要多生成一个关系模式中
上述也可以转换为: 下划线为主键,加粗为外键,考虑的是 一个商品有多个供应商
供应商(供应商编码,供应商名称,类型,联系方式、地址,商品编码)
商品(商品编码,商品名称,类型,单价,数量)
四、绘制数据库模型图
现在工具很多,比较经典的是 Microsoft Visio ,不过我一般使用的是线上的 ProcessOn
好处:设计良好的数据库模型可以通过图形化的方式显示数据库存储的信息及表之间的关系,以确保数据库设计的准确、完整且有效。
大致介绍一下使用visio 绘制数据库模型图
1、打开visio --> 新建 --> 软件和数据库 --> 数据库模型图
2、打开后拖动绘制,先定义表物理名称以及概念名称
3、添加数据列及相应的属性
4、添加实体之间的映射关系
按照上述增加好商品表后在供应商表中添加商品主键,注意拖动关系的时候实体会变成红色
注意:在数据库模型图中体现实体的映射关系,上述 定义的 商品与供应商之间是一对多的关系,多的那一方会有一 的主键作为外键进行关联,
一般来说,一对多的关系是一个表中的主键对应另一个表中的字段名与主键名相同。
在多对多关系中除了要将多对多种的两个实体各自转换为表外,一般要创建一个第三个表,将多对多的关系划分为两个一对多的关系,而这个表称为连接表,主要存放这两个表的主键,用来记录关系的每个匹配项或实例。
如:订单表和产品表间是多对多关系,这种关系可以通过与订单明细表建立两个一对多关系来定义,一个订单有多个产品,每个产品可以出现在多个订单中。