【MySQL必知必会】 范式 | ER模型

article/2025/9/23 18:27:42

范式

第一范式

  • 第一范式要求:所有的字段都是基本数据字段,不可进一步拆分。
    在这里插入图片描述
    在这里插入图片描述

第二范式

  • 第二范式:在满足第一范式的基础上,还要满足数据表里的每一条数据记录,都是可唯一标识的。而且所有字段,都必须完全依赖主键,不能只依赖主键的一部分。

在这里插入图片描述
并且 barcode”是有可能存在重复的, 所有的字段都不能唯一标识表里 的记录。这个时候,我们必须给这个表加上一个主键“itemnumber“。 然后分别拆分为下面这三个表 :
在这里插入图片描述
在这里插入图片描述

第三范式

  • 第三范式:要求数据表在满足第二范式的基础上,不能包含那些可以由非主键字段派生出来 的字段,或者说,不能存在依赖于非主键字段的字段。
    上面 , 字段“suppliername”依赖于非主键字段“supplierid”。 因此需要改为
    在这里插入图片描述

业务优先原则

  • 所谓的业务优先原则,就是指一切以业务需求为主,技术服务于业务。完全按照理论的设计不一定就是最优,还要根据实际情况来决定。
  • quantity * importprice = importvalue,看起来“importvalue”似乎是冗余字段, 但并不会导致数据不一致。可是,如果我们把这个字段取消,是会影响业务的。
  • 如果不保留“importvalue”字段,只有“importprice”和“quantity”的 话,经过四舍五入,会产生较大的误差。这样日积月累,最终会导致查询结果出现较大偏 差,影响系统的可靠性,如果删除的话只会得不偿失,系统的成本都会提高。

范式总结

  • 第一范式:数据表中所有字段都是不可拆分的基本数据项。
  • 第二范式:在满足第一范式的基础上,数据表中所有非主键字段,必须完全依赖全部主键字段。
  • 第三范式:在满足第二范式的基础上,数据表中不能存在可以被其他非主键字段派生出来的字段,或者说,不能存在依赖于非主键字段的字段。
  • 遵循业务优先的原则,首先满足业务需求,在这个前提下,再尽量减少冗余。

ER模型

  • ER 模型也叫作实体关系模型,是用来描述现实生活 中客观存在的事物、事物的属性,以及事物之间关系的一种数据模型。在开发基于数据库 的信息系统的设计阶段,通常使用 ER 模型来描述信息需求和信息特性,帮助我们理清业 务逻辑,从而设计出优秀的数据库。

三个要素

  • 实体,可以看做是数据对象,往往对应于现实生活中的真实存在的个体。(用矩形表示), 强实体是指不依赖于其他实体的实体;弱实体是指对另一个实体有很强 的依赖关系的实体。
  • 属性,则是指实体的特性。
  • 关系,则是指实体之间的联系。
  • 可以独立存在的是实体,不可 再分的是属性。也就是说,属性不需要进一步描述,不能包含其他属性。
  • 关系的3个类型 :
  • 1 对 1:指实体之间的关系是一一对应的 。
  • 1 对多:指一边的实体通过关系,可以对应多个另外一边的实体。
  • 多对多:指关系两边的实体都可以通过关系对应多个对方的实体。
    在这里插入图片描述
  • ER模型 是一个建模的过程 , 需要重视其中的思路 !! 下图 1表示关系只有一个 , NMQP 表示多
  • 这里我是用粗框矩形表示弱实体,用粗框菱形,表示弱实体与它依赖的强实体之间的关系。
    在这里插入图片描述
    在这里插入图片描述
  • 通过外键来表达 1 对多的关系

把元素转换为 表

-- 强实体 
-- 供货商表(demo.supplier)
CREATE TABLE demo.supplier(-- 我们给它添加一个与业务无关的字段“supplierid”为主键,并且设置自增约束。supplierid INT PRIMARY KEY AUTO_INCREMENT,suppliername TEXT,address TEXT,phone TEXT);-- 商品表(demo.goodsmaster)
CREATE TABLE demo.goodsmaster(--我们给商品信息表添加一个与业务无关的字段“itemnumber”为主键,采用手动赋值的方式,原因是可能存在多个门店录入新品,导致冲突的情况itemnumber INT PRIMARY KEY,barcode TEXT,goodsname TEXT,specification TEXT,unit TEXT,salesprice DECIMAL(10,2));
-- 门店表(demo.branch)CREATE TABLE demo.branch(-- 增加一个与业务无关的字段为主键,并且设置自增约束branchid INT PRIMARY KEY AUTO_INCREMENT,branchno TEXT,branchname TEXT,address TEXT,phone TEXT,contacter TEXT);
-- 弱实体 -- 仓库表(demo.stock)CREATE TABLE demo.stock(--添加与业务无关的自增约束字段为主键stockid INT PRIMARY KEY AUTO_INCREMENT,-- 仓库是弱实体,依赖于强实体门店表,所以要把门店表的主键字段包括进来,作为与门店表关联的外键branchid INT NOT NULL,stockno TEXT NOT NULL,stockname TEXT NOT NULL,-- 设置外键约束,与门店表关联CONSTRAINT fk_stock_branch FOREIGN KEY (branchid) REFERENCES branch (branchid)
- );-- 收银款台表(demo.cashier)
mysql> CREATE TABLE demo.stock
-> (
-> --添加与业务无关的自增约束字段为主键
-> stockid INT PRIMARY KEY AUTO_INCREMENT,
-> -- 仓库是弱实体,依赖于强实体门店表,所以要把门店表的主键字段包括进来,作为与门店表关联的外键
-> branchid INT NOT NULL,
-> stockno TEXT NOT NULL,
-> stockname TEXT NOT NULL,
-> -- 设置外键约束,与门店表关联
-> CONSTRAINT fk_stock_branch FOREIGN KEY (branchid) REFERENCES branch (branchid)
-> );-- 员工表(demo.operator)mysql> CREATE TABLE demo.operator
-> (
-> -- 添加与业务无关的自增字段为主键
-> operatorid INT PRIMARY KEY AUTO_INCREMENT,
-> -- 员工是弱实体,依赖于强实体门店表,所以要把门店表的主键字段包括进来,所为与门店表关联的外键
-> branchid INT NOT NULL,
-> workno TEXT NOT NULL,
-> operatorname TEXT NOT NULL,
-> phone TEXT,
-> address TEXT,
-> pid TEXT,
-> duty TEXT,
-> -- 设置外键约束,与门店表关联
-> CONSTRAINT fk_operator_branch FOREIGN KEY (branchid) REFERENCES branch (branchid)
-> );-- 会员表(demo.membermaster)mysql> CREATE TABLE demo.membermaster
-> (
-> -- 添加与业务无关的自增字段为主键
-> memberid INT PRIMARY KEY,
-> -- 会员是弱实体,依赖于强实体门店表,所以要把门店表的主键字段包括进来,所为与门店表关联的外键
-> branchid INT NOT NULL,
-> cardno TEXT NOT NULL,
-> membername TEXT,
-> address TEXT,
-> phone TEXT,
-> pid TEXT,
-> -- 设置默认约束,积分默认为0
-> memberpoints DECIMAL(10,1) NOT NULL DEFAULT 0,
-> -- 设置默认约束,储值默认为0
-> memberdeposit DECIMAL(10,2) NOT NULL DEFAULT 0,
-> -- 设置外键约束,与门店表关联
-> CONSTRAINT fk_member_branch FOREIGN KEY (branchid) REFERENCES branch (branchid)
-> );--多对多的关系转换成一个数据表-- 数据表设计的第三范式的要求和业务优先的原则--进货单表拆分成 进货单头表和进货单明细表
CREATE TABLE demo.importhead
(
importid INT PRIMARY KEY,   -- 添加与业务无关的字段为主键 
listnumber TEXT NOT NULL, -- NOT NULL 非空约束
supplierid INT NOT NULL,    -- 供货商表的主键,反映了参与进货关系的供货商信息
stockid INT NOT NULL,       -- 仓库表的主键,反映了参与进货关系的仓库信息
operatorid INT NOT NULL,    -- 员工表的主键,反映了参与进货关系的员工信息
recordingdate DATETIME NOT NULL,
totalquantity DECIMAL(10,3) NOT NULL DEFAULT 0,
totalvalue DECIMAL(10,3) NOT NULL DEFAULT 0,-- 通过外键来表达 1 对多的关系d
CONSTRAINT fk_importhead_supplier FOREIGN KEY (supplierid) REFERENCES supplier (supplierid),
CONSTRAINT fk_transactionhead_member FOREIGN KEY (memberid) REFERENCES membermaster (memberid),
CONSTRAINT fk_importhead_operator FOREIGN KEY (operatorid) REFERENCES operator (operatorid)
);
CREATE TABLE demo.importdetails
(
importid INT,
itemnumber INT,              -- 商品表的主键,反映了参与进货关系的商品信息
importquantity DECIMAL(10,3) NOT NULL DEFAULT 0,
importprice DECIMAL(10,2) NOT NULL DEFAULT 0,
importvalue DECIMAL(10,2) NOT NULL DEFAULT 0,
PRIMARY KEY (importid,itemnumber),
CONSTRAINT fk_importdetails_goodsmaster FOREIGN KEY (itemnumber) REFERENCES goodsmaster (itemnumber)
);-- 流水单表拆分成流水单头表和流水单明细表
CREATE TABLE demo.transactionhead
(
transactionid INT PRIMARY KEY,   -- 添加与业务无关的字段为主键
transactionno TEXT NOT NULL,
cashierid INT NOT NULL,          -- 收款机表的主键,反映了参与零售关系的收款机信息
memberid INT,                    -- 会员表的主键,反映了参与零售关系的会员的信息
operatorid INT NOT NULL,         -- 员工表的主键,反映了参与零售关系的员工信息
transdate DATETIME NOT NULL,
-- 通过外键来表达 1 对多的关系
CONSTRAINT fk_transactionhead_cashier FOREIGN KEY (cashierid) REFERENCES cashier (cashierid),
CONSTRAINT fk_transactionhead_member FOREIGN KEY (memberid) REFERENCES member (memberid),
CONSTRAINT fk_transactionhead_operator FOREIGN KEY (operatorid) REFERENCES operator (operatorid)
);
CREATE TABLE demo.transactiondetails
(
transactionid INT,
itemnumber INT,                 -- 商品表的主键,反映了参与零售关系的商品信息
quantity DECIMAL(10,3) NOT NULL DEFAULT 0,
price DECIMAL(10,2) NOT NULL DEFAULT 0,
salesvalue DECIMAL(10,2) NOT NULL DEFAULT 0,
PRIMARY KEY (transactionid,itemnumber),
CONSTRAINT fk_transactiondetails_goodsmaster FOREIGN KEY (itemnumber) REFERENCES goodsmaster (itemnumber)
);

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

相关文章

ER模型、ER分析介绍

关注公众号【程猿薇茑】 【仅需一次订阅,作者所有专栏都能看】 推荐【消息队列Kafka】https://bigbird.blog.csdn.net/article/details/108770504 推荐【大数据Flink】https://blog.csdn.net/hellozpc/article/details/109413465 推荐【SpringBoot】https://blog.c…

数据库实验—ER模型

E—R图 实体性用举行表示,矩形内写明实体名。 属性用椭圆表示,并用无向边将其与相应的实体性连接起来。 练习用菱形框表示,框内写出联系名称,用无向边分别与有关实体型链接起来,同时要在无向边上注明联系的类型&#x…

数据库系统笔记4: ER模型

基本概念 Entity(实体):对象,如学生、教师,用方形表示Entity Set(实体集):类 一个实体集必须至少有一个非主键的属性或者它是多对一/多对多关系中的“多”Attribute(属性…

数据库原理之如何设计一个ER模型

数据库原理之如何设计一个ER模型 前言 这里是 数据库系统原理 系列文章,主要介绍数据库系统理论以及数据库实用技术。 数据库技术是计算机学科中的一个重要分支,它的应用非常广泛,几乎涉及所有的应用领域。 关于作者: 小白&#…

在mysql中er是什么模型_er模型是反映数据库应用系统的什么模型

展开全部 er模型是e5a48de588b662616964757a686964616f31333431353365反映数据库应用系统的概念模型 ,表示概念模型的方式有多种其中最常用的是E-R模型,由P.PChen于1976年提出,中文为实体-联系模型。 概念数据模型是面向用户、面向现实世界的…

mysql学生选课系统的关系模型_数据库系统原理ER模型与关系模型

数据库系统是软件的一种,数据库系统自然而然也有他自己的生命周期生存期。它的生存期从规划开始,一直到将它卸载不用了。它的中间过程很复杂,为了实现用户的想法,数据库有关人员将现实生活中的数据进行抽象,然后在进行…

数据库设计(ER模型和UML模型及转换为关系模型的公式)

本文根据b站鲁老师的教学视频整理而来,可能会偏理论化,有点枯燥,但是如果认真看完,还是会有所收获哒。 从本文可以学习到: 对于一个即将展开的项目,我们应该怎么设计及实现数据库。 掌握概念模型&#xff0…

4000字细说ER模型基础概念•业务建模系列

前言 接下来几篇文章会围绕「业务建模」这个方向,展开总结一下。讲到业务建模就联想到ER模型,ER建模可以说是B端产品经理必要掌握的技能。 本文会从以下几个点进行基础指引: 什么是ER模型? ER模型有什么作用? ER图的核…

2.3.2 ER模型

1.实体 定义:用于表示现实世界具有相同属性描述的集合,它表示某一种类所有事物的集合。 表示形状:矩形 说明:(1)一个E-R图中通常包括多个实体 (2)每个实体→一张表 每个实例→一条记录 2.属性 定义:表示实体或实体间…

[MySQL进阶]——ER模型

🏳️‍🌈个人网站:code宝藏 👈,欢迎访问🎉🎉 🙏如果大家觉得博主写的还不错的话,可以点点关注,及时获取我的最新文章 🤝非常感谢大家的支持与点赞…

ER模型详解

ER(实体联系)模型中有三个主要的概念:实体集、属性、联系集。 实体集对应的是数据库中的一个表,一个实体则对应数据库表中的一行。一个属性则对应数据库表中的一列,则就是一个字段。 联系集就是表与表之间的关联关系; 一对一关联…

数据模型及E-R模型

数据模型的基本概念 模型就是对现实世界特征的模拟和抽象,数据模型是对现实世界数据特征的抽象。对于具体的模型人们并不陌生,如航模飞机、地图和建筑设计沙盘等都是具体的模型。最常用的数据模型分为概念数据模型和基本数据模型。 1)概念数据…

E-R模型

知识点 E-R模型(Entity-relationship model)表示: 实体: 用矩形框表示。 属性: 实体的属性用椭圆框表示。 联系:实体间的联系用菱形框表示,并在连线上标明联系的类型,即1—1、1—n或…

ER模型

定义:ER模型即实体-关系模型,ER图即实体-关系图。提供不受任何DBMS约束的面向用户的表达方法, 在数据库设计中被广泛用作数据建模的工具。E-R模型的构成成分是实体集、属性和联系集 其表示方法如下: (1)…

Mysql——ER模型

ER模型 数据库设计是牵一发而动全身的。那有没有什么办法提前看到数据库的全貌呢?比如需要哪些数据表、数据表中应该有哪些字段,数据表与数据表之间有什么关系、通过什么字段进行连接,等等。这样我们才能进行整体的梳理和设计。 其实,ER模…

从图像解释采样定理

在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>2fmax),采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的2.56~4倍;采样定理…

采样定理的直观解释

在 傅里叶级数和傅里叶变换之间的关系 这篇文章中,已经介绍了以下基本知识,建议在阅读本文之前掌握: 梳状函数的频谱图仍然是梳状函数梳状函数与别的函数卷积的结果一定是周期信号 这里的梳状函数 δ T s ( t ) {\delta}_{T_s}(t) δTs​​…

深入理解采样定理 + Matlab 仿真 Sa 函数的采样与恢复

建议配合国宝老师的视频食用。 信号与线性系统分析 吴大正 郭宝龙 文章目录 (1) 采样的说明1. 为什么要取样2. 什么是取样 (2) 采样定理1. 为什么要有奈奎斯特频率2. 什么是采样定理 (3) 信号的恢复(4) Matlab的Sa函数取样仿真1. 采样信号Sa函数的说明2. 进行参数的说明及相关计…

数字信号处理:时域采样定理与频域采样定理

数字信号处理:时域采样定理与频域采样定理 1.时域采样定理 %初始参数 A444.128; alphpi*50*2^0.5; omegapi*50*2^0.5; M64; %做64点fft变换 n0:M-1;%采样频率fs为1000Hz Fs11000; T11/Fs1; xn1A*exp(-alph*n*T1).*sin(omega*n*T1); %对原函数的抽样取点 Xk1fft(…

连续时间采样及采样定理——MATLAB

一、实验目的 1、掌握连续时间信号离散化的方法(即采样),并能利用Matlab编程加以仿真实现; 2、掌握连续时间信号的傅立叶变换和离散时变换的仿真实现方法; 3、学会利用傅里叶变换和离散时间信号的傅立叶变换的方法对连续时间信进行频谱的分析…