关系数据库设计步骤

article/2025/9/19 9:06:32

看这篇文章之前,希望大家能够对数据库系统、数据模型有知识储备,如果有疑惑可以看我的另外一篇博客数据库系统。
还需要对关系型数据库基础知识有所了解,有疑惑朋友可以看关系型数据库基础知识

文章目录

  • 数据库设计的步骤
  • 概念结构设计
    • E-R模型
      • 例子
        • 设计各个分ER图、
        • ER图集成
  • 逻辑结构设计
    • E-R图向关系模型的转换
      • 实体型的转换
      • 实体型间联系的转换
    • 数据模型的优化
    • 设计用户子模式

  • 什么是数据库设计?
    数据库设计是指对于一个给定的应用环境,设计一个优良的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。
    我们数据库不一定都是关系型数据库,本文只是基于关系型数据库设计,希望给大家讲清楚数据库设计的步骤。

数据库设计的步骤

在这里插入图片描述
在这里插入图片描述

  1. 需求分析
    ➢ 了解 和分析用户的需求(数据与处理要求)
    ➢ 是设计数据库的起点
    ➢ 是最困难和最耗时的一步
    ➢ 结果是否准确地反映了用户的实际要求,将直接影响到后面各个
    阶段的设计,并影响到设计结果是否合理和实用。决定了构建数据库的速
    度和质量。
    ➢ 需求分析阶段的分析结果是形成用户需求规格说明书和数据字典。
  2. 概念结构设计
    ➢ 对用户需求进行综合、归纳与抽象, 形成独立于具体DBMS的概念模
    型(E-R模型)。
  3. 逻辑结构设计
    ➢ 将概念结构转换为某个DBMS所支持 的数据模型,并对其进行优化。
  4. 物理结构设计
    ➢ 为逻辑数据结构选取一个最适合应用环境的物理结构,包括存储结构
    和存取方法。
  5. 数据库实施
    ➢ 根据逻辑设计和物理设计的结果构建数据库,编写与调试应用程序,
    组织数据 入库并进行试运行。
  6. 数据库运行和维护
    ➢ 经过试运行后即可投入正式运行。必须不断对数据库设计进 行评估、
    调整与修改。
    ➢ 在运行过程中要对系统进行性能监测、转储/恢复、数据库重组和重构。
    在这里插入图片描述

概念结构设计

  • 实体之间的联系
    ◼ 现实世界中事物内部以及事物之间的联系在信息世界中反映为实
    体(型)内部的联系和实体(型)之间的联系。
    ◼ 实体内部的联系: 是指组成实体的各属性之间的联系
    ◼ 实体之间的联系: 是指不同实体集之间的联系(E-R模型关注的)
    ➢ 通常有一对一,一对多,多对多三种联系类别
  • 联系的度/元
    ➢ 把参与联系的实体型的数目称为联系的度。
    ➢ 两个实体型之间的联系度为2,称为二元联系;
    ➢ 一个实体型内不同实体之间的联系度为1,称为一元联系;
    ➢ 三个实体型之间的联系度为3,称为三元联系;
    ➢ N个实体型之间的联系度为N,称为N元联系。
    在这里插入图片描述

E-R模型

  • E-R图的表示(Chen方法)
    ➢ E-R图提供了表示实体型、属性和联系的方法
  • E-R图的表示
    ➢ 实体型:用矩形表示
    ➢ 属性:用椭圆形表示
    ◼ 多值属性:用双线椭圆表示
    ◼ 派生/导出属性:用虚线椭圆表示
    ➢ 码/关键字:加下划线
    ➢ 连接实体型和属性:直线
    ➢ 联系:用菱形表示
    ➢ 连接实体与联系:直线
    ➢联系也可以有属性,连接联系和属性:直线
    在这里插入图片描述
  • 联系的类别(联系的基数):常用的表示
    ◼ 在连接实体型与联系的无向边旁标上联系的类别(1:1,1:n,n:m)
    ◼ 一方实体型的直线旁标上1,多方实体型的直线旁标上n或m
    在这里插入图片描述
    在这里插入图片描述
  • 弱实体型
    ➢ 如果一个实体型的存在依赖于其它实体型的存在,则这个实体型叫做弱实体型, 否
    则叫做强实体型。
    ➢ 一般地讲,如果不能从一个实体型的属性中找出可以作为码的属性,即该实体型的
    主键的一部分或全部从其依赖的强实体型中获得,则该实体型为弱实体型。
    ➢ 弱实体型与它所依赖的强实体型之间是部分与整体的关系。
    整体实体如果被破坏,部分实体则不能存在。
    ➢ 在E-R图中用双矩形表示弱实体型,
    用双菱形表示弱实体型与它依赖的
    强实体型之间的识别联系。
    在这里插入图片描述
    示例1——基本的实体-联系表达

在这里插入图片描述
在这里插入图片描述
看下面的示例:
在这里插入图片描述

  • 派生属性怎样设计?
    派生属性年龄可以不用包含在关系模型中,可以通过当前时间减出生年月。派生属性可以不用包含关系模型中。
  • 复合属性怎样设计
    **属性是不可在分的数据项,它不可以包含其他属性,**复合属性家庭住址需要直接连到实体客户上。
  • 多值属性怎样设计
    上图中电话号码是多值属性(移动电话、家庭电话、单位电话等)两种设计方法:
  1. 将多值属性处理方法类同于复合属性直接全并到实体上。在这里插入图片描述改方法有几点不足:1)浪费存储空间,并不是所有客户都需要存贮三个电话号码。2)缺少弹性,如果需要存储更多类型的电话号码则需要修改模型。
  2. 讲多值属性建模为弱实体型表示。例如可以将多值属性电话号码建模为联系方式弱实体型,它有两个属性电话用途和电话号码。联系电话是部分码,要联系客户编号构成主码。在这里插入图片描述
    多值属性例子二:在这里插入图片描述
    联系和实体一样,最终是需要存储起来的,如果管理员与商品之间存在多对多的管理联系,那么就要用一个新的关系来存储这个联系,用于记录哪位管理员在什么时间对哪种商品进行了何种操作。

这里需要注意联系和实体一样是要存储起来的,所以要创建联系是要谨慎!联系不能有增删改原因请看下图:
在这里插入图片描述
如果管理员删除P0001,那么商品中就没有P0001,那么管理联系表中就不会有P0001不满足参照完整性,所以管理不能成为联系,而应该是中间没有,直接将管理员拥有管理权限就行,不需要将管理设置为联系。就是说不能将实体的功能当做联系
在这里插入图片描述
在下面这个ER图中,因为需要实现不同的功能,所以点赞数可以是联系也可以是功能:
➢ 作为联系:如果我们要存储哪个用户点赞了哪条动态,则要把点赞当作联系来处理。
➢ 作为功能:若并不要存储哪个用户点赞了哪条动态,只想记录某条动态的点赞数,则把点赞当作功能来处理,在动态实体上加一属性点赞数。
在这里插入图片描述

例子

❖ 某工厂开发信息系统,经过可行性分析,详细调查确定了该系统由
物资管理、销售管理、劳动人事管理等子系统组成。
❖ 下面分别设计各子系统的分E-R图。

设计各个分ER图、

  • 物资管理子系统E-R图的设计
    在这里插入图片描述
  • 人事管理子系统E-R图的设计
    在这里插入图片描述
  • 销售管理子系统E-R图的设计
    ❖ 该子系统的主要功能是:
    ⚫ 处理顾客和销售员送来的订单
    ⚫ 工厂是根据订货安排生产的
    ⚫ 交出货物同时开出发票
    ⚫ 收到顾客付款后,根据发票存根和信贷情况进行应收款处理通过需求分析,知道销售子系统功能围绕“订单”和“应收账款”的处理来实现。

❖先设计该E-R图的草图:
数据结构中订单、顾客、顾客应收账目、 产品是许多子功能、数据流共享的数据, 因此设计为实体。
(如右图所示)
❖再对E-R图进行详细设计和调整:参照需求分析和数据字典中的详尽描述, 遵循前面给出的两个准则。
在这里插入图片描述
(1)每张订单由订单号、若干头信息和订单细节组成。订单细节又有订货 的零件号、数量等来描述。按照准则(2),订单细节就应该上升为实体。 一张订单可以订若干产品,订单与订单细节两个实体之间是1∶n的联系。
(2)原订单和产品的联系实际上是订单细节和产品的联系,增加了一个联系—参照2。订单处理时从中获得当前单价、产品重量等信息。
(3)工厂对大宗订货给予优惠。每种产品都规定了不同订货数量的折扣,应增加一个实体—“折扣规则” 存放这些信息。
在这里插入图片描述
◼ 对每个实体定义的属性如下:
➢ 顾客:{顾客号,顾客名,地址,电话,信贷状况,账目余额}
➢ 订单:{订单号,顾客号,订货项数,订货日 期,交货日期,工种号,生产地点}
➢ 订单细则:{订单号,细则号,零件号,订货 数,金额}
➢ 应收账款:{顾客号,订单号,发票号,应收 金额,支付日期,支付金额,当前余额,货款 限额}
➢ 产品:{产品号,产品名,单价,重量}
➢ 折扣规则:{产品号,订货量,折扣}

ER图集成

➢ E-R图的集成一般需要分两步
◼合并。解决各分E-R图之间的冲突,将分E-R图合并,生成
初步E-R图。
◼修改和重构。消除不必要的冗余,生成基本E-R图。
合并E-R图,生成初步E-R图
◼ 各个局部应用所面向的问题不同,各个子系统的E-R图之间必定会存在
许多不一致的地方,称之为冲突。
◼ 子系统E-R图之间的冲突主要有三类:
①属性冲突
②命名冲突
③结构冲突

① 属性冲突
➢属性域冲突,即属性值的类型、取值范围或取值集合不同。
◼ 例如零件号,有的部门把它定义为整数,有的部门把它定义为字符型。
◼ 年龄,某些部门以出生日期形式表示职工的年龄,有的用整数表示职工的年龄。
➢属性取值单位冲突
◼ 例如零件的重量有的以公斤为单位,有的以斤为单位,有的以克为单位。
② 命名冲突
➢同名异义,即不同意义的对象在不同的局部应用中具有相同的名字。
➢异名同义(一义多名),即同一意义的对象在不同的局部应用中具有不
同的名字。
◼ 如对科研项目,财务科称为项目,科研处称为课题,生产管理处称为工程。
➢命名冲突
◼ 可能发生在实体、联系一级上
◼ 也可能发生在属性一级上
◼ 通过讨论、协商等行政手段加以解决
③ 结构冲突
➢同一对象在不同应用中具有不同的抽象。
◼ 例如,职工在某一局部应用中被当作实体,而在另一局部应用中被当作属性。
◼ 解决方法:把属性变换为实体或把实体变换为属性,使同一对象具有相同的抽象。
➢同一实体在不同子系统的E-R图中的属性个数和属性排列次序不完全相同。
◼ 解决方法:取各子系统的E-R图中属性的并集,再适当调整属性的次序。
➢实体间的联系在不同的E-R图中为不同的类型。
◼ 例如,实体E1与E2在一个E-R图中是多对多联系,在另一个E-R图中是一对多联系
◼又如,在某E-R图中E1与E2发生联系,而在另一个E-R图中E1、E2、E3三者有联系
◼ 解决方法:根据应用的语义对实体联系的类型进行综合或调整。
在这里插入图片描述
(2)消除不必要的冗余,设计基本E-R图
◼ 冗余的数据是指:可由基本数据导出的数据
◼ 冗余的联系是指:可由其他联系导出的联系
◼ 冗余带来的问题:破坏数据库的完整性,数据库维护困难,应当予以消除
◼ 消除冗余方法:

  1. 分析方法
  2. 规范化理论的方法(范式)
    在这里插入图片描述
    在这里插入图片描述
    ❖ 用规范化理论来消除冗余
    ① 确定分E-R图实体之间的数据依赖。
    ◼实体之间一对一、一对多、多对多的联系可以用实体码之间的函数依赖来表示。
    ② 求FL的最小覆盖GL ,差集为 D= FL - GL
    ◼逐一考察D中的函数依赖,确定是否是冗余的联系,若是,就把它去掉
    ❖ 应注意的问题:
    ➢ 冗余的联系一定在D中,而D中的联系不一定是冗余的;
    ➢ 当实体之间存在多种联系时,要将实体之间的联系在形式上加以区分。
    在这里插入图片描述
  • 概念设计小结
    1.实体与属性的划分原则
    (1)作为属性,不能再具有 需要描述的性质。
    (2)属性不能与其他实体具 有联系。
    2.E-R图的集成
    ➢设计各个子系统的分E-R图
    ➢消除冲突,进行集成
    ➢消除冗余,设计基本E-R图

逻辑结构设计

逻辑结构设计的任务
➢ 把概念结构设计阶段设计好的基本E-R图转换为与选用的DBMS产品所支持的逻辑结构。
➢ 目前主要使用关系模型,关系模型的逻辑结构是一组关系模式的集合。

E-R图向关系模型的转换

➢ 转换内容
◼ 将E-R图转换为关系模型:就是将实体型、实体的属性和实体型之间的联系转化为关系模式。
➢ 转换原则
◼ 实体型的转换
◼ 实体型之间联系的转换
在这里插入图片描述

实体型的转换

在这里插入图片描述
在这里插入图片描述

实体型间联系的转换

  • 1-1联系
    实体型之间联系的转换
    (1)实体型间的1:1联系:
    ➢ 可以转换为一个独立的关系模式
    ◼ 关系模式的属性:与该联系相连的各实体的码以及联系本身的属性
    ◼ 关系模式的候选码:每个实体的码均是该关系模式的候选码
    ➢ 也可以与相连的任意一端对应的关系模式合并(推荐使用)
    ◼ 关系模式的属性:
    与某一端关系模式合并,则在该关系模式的属性中加入另一端关系模式的码和联系的属性
    ◼ 合并后关系模式的码:不变。但加入的另一端关系模式的码可以作为该关系模式的候选码。
    在这里插入图片描述
  • 1-n联系
    实体型间的1:n联系:
    ➢ 可以转换为一个独立的关系模式
    ◼ 关系模式的属性:与该联系相连的各实体的码 + 联系本身的属性
    ◼ 关系模式的码:n端的实体的码
    ➢ 与n端对应的关系模式合并
    ◼ 合并后关系模式的属性:在n端关系模式中 + 1端关系的码 + 联系的属性
    ◼ 合并后关系模式的码:不变
    ◼ 可以减少系统模式中的关系个数,一般情况下更倾向于采用这种方法
    在这里插入图片描述
  • m-n
    实体型间的m:n联系:
    ➢ 一个m:n联系转换为一个关系模式
    ◼ 关系的属性:与该联系相连的各实体的码以及联系本身的属性
    ◼ 关系的码:各实体码的组成关系的码或关系码的一部分
    在这里插入图片描述
    三个或三个以上实体间的一个多元联系
    ➢ 转换为一个关系模式
    ◼ 关系模式的属性:与该多元联系相连的各实体的码 + 联系本身的属性
    ◼ 关系模式的码:各实体码的组成关系的码或关系码的一部分

在这里插入图片描述

  • 具有相同码的关系模式可合并
    ➢ 目的:减少系统中的关系个数
    ➢ 合并方法:
    ◼ 将其中一个关系模式的全部属性加入到另一个关系模式中
    ◼ 然后去掉其中的同义属性(可能同名也可能不同名)
    ◼ 适当调整属性的次序
    对于1-n和1-1建议合并
    在这里插入图片描述
    对于1-n和1-1建议合并

数据模型的优化

❖ 数据库逻辑设计的结果不是唯一的。
❖ 得到初步数据据模式后,还应该适当地修改、调 整数据库逻辑结构,以进一步提高数据库应用系统的性能,这就是数据模型的优化。
❖ 关系数据模型的优化通常以规范化理论为指导。(范式)

  • 优化数据模型的方法:
    (1)确定数据依赖
    按需求分析阶段所得到的语义,分别写出每个关系模式内部各属性之间的数据依赖以及不同关系模式属性之间数据依赖。
    (2)对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。
    (3)按照数据依赖的理论对关系模式进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖等,确定各关系模式分别属于第几范式。
    (4)按照需求分析阶段得到的各种应用对数据处理的要求,分析对于这样的应用环境这些
    模式是否合适,确定是否要对它们进行合并或分解。包括水平分解和垂直分解。
  • 几点注意:
    ❖ 对于一个具体应用来说,到底规范化进行到什么程度,需要权衡响应时间和 潜在问题两者的利弊来决定。
    ❖ 当查询经常涉及两个或多个关系模式的属性时,系统必须经常地进行连接运 算,连接运算的代价是相当高的。这种情况下,需要降低规范化程度。
    ❖ 非BCNF的关系模式会存在不同程度的更新异常。如果在实际应用中对此关 系模式只是查询,并不执行更新操作,就不会产生实际影响。

设计用户子模式

❖ 数据库模式——全局模式。
考虑系统全局应用需求,时间效率、空间效率、易维护等。
❖ 用户子模式——视图机制
考虑局部应用的特殊需求和用户人习惯与方便。包括:
(1)使用更符合用户习惯的别名
➢ 合并各分E-R图曾做了消除命名冲突的工作,以使数据库系统中同一关 系和属性具有唯一的名字。这在设计数据库整体结构时是非常必要的。
➢ 在设计用户子模式时可以设计子模式时重新定义某些属性名,使其与用户习惯一致,以方便使用。
(2)针对不同级别的用户定义不同的视图,提高系统的安全性假设有关系模式: 产品(产品号,产品名,规格,单价,生产车间,生产负责人,产品成本,产品合格率,质量等级)
➢ 为一般顾客建立视图:
产品1(产品号,产品名,规格,单价)
➢ 为产品销售部门和管理部门建立视图:
产品2(产品号,产品名,规格,单价,生产车间,生产负责人)
(3)简化用户对系统的使用
➢ 某些局部应用中经常要使用一些很复杂的查询,为了方便用户,可以将这些复 杂查询定义为视图。
在这里插入图片描述
数据设计完整例子


http://chatgpt.dhexx.cn/article/Pdv3vMcp.shtml

相关文章

数据库设计步骤(超级详细)|数据库

数据库设计 我们先来看这样一个问题 假如遇到下面这样的设计需求,我们如何完成数据库的设计呢? 设计需求: 假设商品经销商有基本实体集:供应商Vendors、产品目录Products、顾客信息Customers和顾客订单Orders。 各个实体的属性集…

nginx跨域|配置nginx跨域详解

在项目的nginx配置目录中,添加如下命令即可解决跨域问题,亲测有效。 # $http_origin动态获取请求客户端请求的域 不用*的原因是带cookie的请求不支持*号 add_header Access-Control-Allow-Origin $http_origin; # 表示请求头的字段 动态获取 add_head…

nginx跨域配置步骤

假设接口服务器地址:http://192.168.2.1:8081 1、先查看接口本身是否能调通(随便找个get接口在浏览器测试下,如:http://192.168.2.1:8081/testmanage/test/deleteTest) 2、找到nginx的压缩目录,修改conf/…

Nginx跨域配置详解

一、概念 Ningx,是轻量级、开源的web服务器,具有高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。 优势: 以事件驱动的方式编写,使其具有高并发高性能可扩展性好热部署 应用场景 静态资源服务&#xff0…

CORS解决跨域问题(Nginx跨域配置)

背景: 同域:域名(父域名和子域名都相同),端口,协议都相同 跨域:非同域的请求 问题: 浏览器上,我们访问127.0.0.1:80,但是127.0.0.1:80 会去请求127.0.0.1:…

Nginx配置反向代理解决跨域问题

通过Nginx配置反向代理结果跨域问题 第一步:下载Nginx 一、下载 官网下载地址:http://nginx.org/en/download.html 我下载的版本:http://nginx.org/download/nginx-1.15.2.zip (我也是参考网上的步骤,所以下载的不是…

Nginx配置跨域及解析

一、代码 先放上nginx配置代码 # 以代理百度地图api为例location /mymap/ {proxy_pass http://api.map.baidu.com/;# 配置跨域代理 add_header Access-Control-Allow-Origin $http_origin;add_header Access-Control-Allow-Methods GET,POST,OPTIONS…

nginx配置详解,nginx跨域问题

文章目录 前言更改hosts文件新增velocityerp.top.conf配置文件nginx配置header参数(解决跨域),接口方配置nginx反向代理(解决跨域),发送方配置nginx端口转发(解决跨域)nginx内部跳转nginx配置优先级详解 前言 本文介绍…

nginx 配置支持跨域

在nginx.conf文件内,server中加入以下内容 #允许跨域请求的域,*代表所有 add_header Access-Control-Allow-Origin *; #允许带上cookie请求 add_header Access-Control-Allow-Credentials true; #允许请求的方法,比如 GET/POST/PUT/DELETE a…

通过Nginx来解决跨域问题

Nginx跨域实现 首先大家要搞清楚什么是跨域,为什么会有跨域情况的出现。哪些情况属于跨域? 跨域:由于浏览器的同源策略,即属于不同域的页面之间不能相互访问各自的页面内容 注:同源策略,单说来就是同协议&a…

Nginx 解决跨域

项目准备 前端网站地址:http://localhost:8080 服务端网址:http://localhost:8081 确认服务端是没有处理跨域的,先用postman测试服务端接口是正常的 当前端网站8080去访问服务端接口时,就产生了跨域问题,那么如何解…

1 Nginx跨域配置

跨域问题在之前的单体架构开发中,其实是比较少见的问题,除非是需要接入第三方SDK时,才需要处理此问题。但随着现在前后端分离、分布式架构的流行,跨域问题也成为了每个Java开发必须要懂得解决的一个问题。 跨域问题产生的原因 产…

Nginx跨域配置

随着越来越多的项目走向了前后端分离,前端服务,需要访问到不同的后端地址,经常遇到跨域问题。本文主要介绍使用Nginx解决跨域问题。 1.什么是跨域 由于浏览器的同源策略,用来限制从一个源加载的文档或脚本与来自另一个源的资源进…

flyai中的dataset对象

Help on Dataset in module flyai.dataset object:class Dataset(builtins.object) | Methods defined here: | | __init__(self, epochs5, batch32, val_batch32) | :param epochs: 训练的轮次,最大不超过100 | :param batch: 训练的批次大小&#xff…

FlyAI资讯:Uber正式开源分布式机器学习平台:Fiber

摘要:在过去的几年中,计算机不断增强的处理能力推动了机器学习的进步。算法越来越多地利用并行性,并依赖分布式训练来处理大量数据。然而,随之而来的是增加数据和训练的需求,这对管理和利用大规模计算资源的软件提出了…

FlyAI小课堂:Python机器学习笔记:Logistic Regression

Logistic回归公式推导和代码实现 1,引言 logistic回归是机器学习中最常用最经典的分类方法之一,有人称之为逻辑回归或者逻辑斯蒂回归。虽然他称为回归模型,但是却处理的是分类问题,这主要是因为它的本质是一个线性模型加上一个映…

FlyAI竞赛:图片颜值打分趣味赛

人工智能学习离不开实践的验证,推荐大家可以多在FlyAI-AI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力。FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台。每周免费提供项目开源算法样例,支持算法能力变现以及快速的…

FlyAI小课堂:Tensorflow-分布式训练

人工智能学习离不开实践的验证,推荐大家可以多在FlyAI-AI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力。FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台。每周免费提供项目开源算法样例,支持算法能力变现以及快速的…

FlyAI小课堂:【文本分类-中文】textRNN

摘要: 随着深度学习的快速发展,人们创建了一整套神经网络结构来解决各种各样的任务和问题。在英文分类基础上,中文文本分类的处理也同样重要... 人工智能学习离不开实践的验证,推荐大家可以多在FlyAI-AI竞赛服务平台多参加训练和竞赛&#x…

FlyAI小课堂:【文本分类-中文】textCNN

摘要: 随着深度学习的快速发展,人们创建了一整套神经网络结构来解决各种各样的任务和问题。在英文分类基础上,中文文本分类的处理也同样重要... 人工智能学习离不开实践的验证,推荐大家可以多在FlyAI-AI竞赛服务平台多参加训练和竞赛&#x…