关系emp与规范化讲解

关系emp与规范化

  • 关系emp
    • 1. 实体(Entities)
    • 2. 关系(Relationships)
    • 3. 参与(Participation)
    • 4. ER图(实体-关系图)
    • 5. 关系的度数(Cardinality)
    • 6. 示例:员工与部门的关系
  • 规范化
    • 1. 第一范式(1NF)
    • 2. 第二范式(2NF)
    • 3. 第三范式(3NF)
    • 4. Boyce-Codd范式(BCNF)
    • 总结:
  • 示例
    • 1. 第一范式(1NF):数据原子化
    • 2. 第二范式(2NF):消除部分依赖
    • 3. 第三范式(3NF):消除传递依赖
    • 4. Boyce-Codd范式(BCNF):消除候选键间的依赖
    • 总结

关系emp

关系 emp(Entity-Relationship Model with Participation)是一种用来描述实体和实体之间关系的模式,通常用于数据库设计。它特别强调参与的概念,即实体如何参与关系中的角色。这种关系在数据库设计中很常见,尤其是设计员工(emp)系统时,常用来管理人员的各种信息和与其他实体的关联。

1. 实体(Entities)

在数据库中,实体可以理解为现实世界中的对象或事物。比如,emp 可能表示 “员工(employee)” 这样的实体。每个实体都会有一组属性(属性是对实体的描述)。

  • 举例:对于员工实体,常见的属性有:
    • emp_id:员工编号
    • emp_name:员工姓名
    • emp_age:员工年龄
    • emp_salary:员工薪资
    • emp_dept:员工所属部门

2. 关系(Relationships)

关系描述实体之间如何相互关联。在emp系统中,员工可能与多个实体有关系,比如部门、项目、职位等。

  • 举例
    • 员工和部门:一个员工属于某个部门,一个部门可以有多个员工。这种关系就是 一对多(1:N) 的关系。
    • 员工和项目:一个员工可以参与多个项目,一个项目也可以有多个员工。这种关系就是 多对多(M:N) 的关系。

3. 参与(Participation)

参与表示实体是否必须出现在某个关系中。它可以分为全参与部分参与

  • 全参与(Total Participation):某个实体中的每一个实例都必须参与某个关系。例如,在一个系统中,可能规定每个员工都必须属于某个部门。
  • 部分参与(Partial Participation):实体中的部分实例可以不参与某个关系。例如,可能有些员工不参与任何项目。

4. ER图(实体-关系图)

为了表示 emp 的各种关系,可以通过 ER 图形象化表示。在 ER 图中:

  • 实体用矩形表示。
  • 关系用菱形表示。
  • 属性用椭圆表示。

示例
如果我们设计一个员工管理系统,可能涉及到的 ER 图如下:

  • 实体EmployeeDepartmentProject
  • 关系Works_for(员工属于部门)、Works_on(员工参与项目)
  • 属性Employee 可能有 emp_idemp_name 等属性,Department 可能有 dept_iddept_name 等属性。

5. 关系的度数(Cardinality)

emp 系统中,关系的度数描述了每个实体能够关联其他实体的最大数目。常见的度数有:

  • 一对一(1:1):每个员工只属于一个职位,每个职位只对应一个员工。
  • 一对多(1:N):一个部门可以有多个员工,但一个员工只能属于一个部门。
  • 多对多(M:N):一个员工可以参与多个项目,一个项目也可以有多个员工。

6. 示例:员工与部门的关系

假设我们有以下两个实体:

  • Employee:员工实体,包含 emp_id, emp_name, emp_age, emp_salary
  • Department:部门实体,包含 dept_id, dept_name

它们的关系可以是 Works_for,表示一个员工属于某个部门。这个关系的 ER 图可以表示为:

  • 实体 Employee实体 Department 通过 关系 Works_for 相连,Works_for 的度数为 1:N,表示一个员工只能属于一个部门,但一个部门可以有多个员工。

总结来说,关系 emp 主要用于表示数据库中的实体(如员工)的各种属性及其与其他实体的关系(如部门、项目等)。在数据库设计中,这样的关系建模可以帮助明确系统中的各类实体如何关联,并且确保数据结构合理性。


规范化

在数据库设计中,规范化(Normalization)是一种将数据结构组织得更高效的方法。其主要目标是减少数据冗余和提高数据完整性。规范化通常通过不同的范式(Normal Form, NF)实现,每种范式都有自己的规则和目标。常见的有第一范式(1NF)第二范式(2NF)第三范式(3NF)BCNF(Boyce-Codd范式)。

1. 第一范式(1NF)

定义:第一范式要求数据库表中的每个字段都是原子的,即字段不可再分割,表中的每一列都只能存储一个单一值。

特点

  • 每个表格中的字段值必须是不可再分割的单一值。
  • 数据表中不能有重复的列,也不能有多值的列。
  • 行的顺序和列的顺序可以任意调换。

示例
不符合1NF的表:

学生ID学生姓名课程
1张三数学, 物理
2李四英语

上表中的 课程 列包含多个值,这违反了 1NF。

符合1NF的表:

学生ID学生姓名课程
1张三数学
1张三物理
2李四英语

2. 第二范式(2NF)

定义:第二范式是在满足 1NF 的基础上,要求数据表中每个非主属性都完全依赖于主键,即没有部分依赖(partial dependency)。如果主键是组合主键(由多个字段组成),则所有非主属性必须依赖于整个组合主键,而不是组合主键中的某一部分。

特点

  • 满足 1NF。
  • 消除部分依赖:非主属性不能依赖于组合主键中的某一个部分。

示例
不符合2NF的表:

学生ID课程ID成绩学生姓名
110190张三
210285李四

在上面的表格中,主键是 学生ID课程ID 的组合。但是,学生姓名 只依赖于 学生ID,而与 课程ID 无关,这是一种部分依赖,不符合2NF。

符合2NF的表:
学生表

学生ID学生姓名
1张三
2李四

成绩表

学生ID课程ID成绩
110190
210285

通过将 学生姓名 提取到单独的学生表中,消除了部分依赖,符合2NF。

3. 第三范式(3NF)

定义:第三范式是在满足 2NF 的基础上,要求非主属性不传递依赖于主键,即非主属性不能依赖于其他非主属性。

特点

  • 满足 2NF。
  • 消除传递依赖:非主属性不能通过其他非主属性间接依赖主键。

示例
不符合3NF的表:

学生ID系ID系名称
1001计算机系
2002数学系

在此表中,学生ID 是主键,系名称 依赖于 系ID,而 系ID 又依赖于 学生ID。因此,系名称 是通过 系ID 间接依赖于主键的,这违反了3NF。

符合3NF的表:
学生表

学生ID系ID
1001
2002

系表

系ID系名称
001计算机系
002数学系

通过将 系名称系ID 放在一个单独的系表中,消除了传递依赖,符合3NF。

4. Boyce-Codd范式(BCNF)

定义:BCNF 是 3NF 的一个强化版本。BCNF 要求数据库表中的每个决定码(determinant,决定其他字段的属性)必须是候选键(candidate key)。如果存在非主属性决定了主键的情况,即存在不依赖于候选键的决定码,就不符合 BCNF。

特点

  • 满足 3NF。
  • 表中每个决定属性必须是候选键。
  • 消除某些特殊的依赖情况,如当表中有多个候选键且部分候选键依赖于另一个候选键时。

示例
不符合BCNF的表:

课程ID教师ID教师姓名
10110张老师
10220李老师

在这个表中,课程ID教师ID 共同组成候选键。然而,教师姓名 依赖于 教师ID,而 教师ID 不是主键的一部分,这就违反了 BCNF 的规则。

符合BCNF的表:
教师表

教师ID教师姓名
10张老师
20李老师

课程表

课程ID教师ID
10110
10220

通过将 教师姓名 从原表中移出,确保每个决定属性都是候选键,符合BCNF。


总结:

  • 1NF:每列保持原子性,即字段不能有多个值。
  • 2NF:消除部分依赖,即每个非主属性必须完全依赖于主键。
  • 3NF:消除传递依赖,非主属性不依赖其他非主属性。
  • BCNF:更严格,要求每个决定属性都必须是候选键,防止特殊依赖情况。

示例

结合 emp(假设表示 “员工”)这一实体,讲解数据库的范式(1NF、2NF、3NF 和 BCNF)时,我们可以使用员工管理系统为例,逐步展示规范化如何改善数据结构、消除冗余和保证数据一致性。

1. 第一范式(1NF):数据原子化

要求:表中每个字段的值都是原子的,不可再分割,不能包含多个值。

不符合1NF的表

emp_idemp_nameemp_phoneemp_address
1张三13800000000, 13900000000北京市海淀区, 北京市朝阳区
  • 问题emp_phone 列和 emp_address 列都包含多个值,这违反了 1NF。

符合1NF的表

emp_idemp_nameemp_phoneemp_address
1张三13800000000北京市海淀区
1张三13900000000北京市朝阳区
  • 修改方式:我们将每个电话号码和地址都分成独立的行。这样,每个字段中的值是原子性的,即不可再分割的。

2. 第二范式(2NF):消除部分依赖

要求:在满足 1NF 的基础上,所有非主属性必须完全依赖于主键,而不是部分依赖于组合主键的一部分。换句话说,表中如果有组合主键,非主属性不能只依赖于其中的一个部分。

不符合2NF的表

emp_iddept_idemp_namedept_namesalary
110张三销售部5000
220李四财务部6000
  • 问题:这里的组合主键是 emp_iddept_id。但是,emp_name 只依赖于 emp_iddept_name 只依赖于 dept_id,这是部分依赖,不符合 2NF。

符合2NF的表
员工表

emp_idemp_namesalary
1张三5000
2李四6000

部门表

dept_iddept_name
10销售部
20财务部

关系表(员工所属部门)

emp_iddept_id
110
220
  • 修改方式:我们将员工信息(如 emp_name)和部门信息(如 dept_name)分离到不同的表中。这样,非主属性不再部分依赖于组合主键的一部分,而是完全依赖于主键。

3. 第三范式(3NF):消除传递依赖

要求:在满足 2NF 的基础上,非主属性之间不能有传递依赖,非主属性不能通过另一个非主属性间接依赖主键。

不符合3NF的表

emp_idemp_namedept_iddept_namedept_location
1张三10销售部北京
2李四20财务部上海
  • 问题dept_location 依赖于 dept_id,而 dept_id 又依赖于主键 emp_id,这是传递依赖,不符合 3NF。

符合3NF的表
员工表

emp_idemp_namedept_id
1张三10
2李四20

部门表

dept_iddept_namedept_location
10销售部北京
20财务部上海
  • 修改方式:我们将部门的位置信息提取到一个单独的 部门表 中。这样,消除了 dept_location 的传递依赖,非主属性不再通过其他非主属性依赖主键,符合3NF。

4. Boyce-Codd范式(BCNF):消除候选键间的依赖

要求:在满足 3NF 的基础上,任何决定属性必须是候选键。BCNF 解决了 3NF 中候选键不一致的问题。

不符合BCNF的表

emp_iddept_idemp_positiondept_manager
110销售经理张经理
220财务主管李经理
  • 问题:这里存在两个候选键 emp_iddept_id,其中 dept_manager 依赖于 dept_id,但 dept_id 不是主键。这不符合 BCNF 的要求。

符合BCNF的表
员工表

emp_iddept_idemp_position
110销售经理
220财务主管

部门表

dept_iddept_manager
10张经理
20李经理
  • 修改方式:我们将 dept_manager 移到 部门表 中,确保所有决定属性都是候选键,消除候选键间的依赖,符合 BCNF。

总结

通过规范化范式的应用,emp(员工表)可以逐步优化:

  • 1NF:每列必须保持原子性,不可包含多个值。
  • 2NF:消除部分依赖,所有非主属性必须完全依赖主键。
  • 3NF:消除传递依赖,非主属性不能通过其他非主属性间接依赖主键。
  • BCNF:更严格的要求,确保所有决定属性必须是候选键,防止候选键之间的依赖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/438517.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务nginx解析部署使用全流程

目录 1、nginx介绍 1、简介 2、反向代理 3、负载均衡 2、安装nginx 1、下载nginx 2、解压nginx安装包 3、安装nginx​编辑 1、执行configure命令 2、执行make命令 4、启动nginx 1、查找nginx位置并启动 2、常用命令 3、反向代理 1、介绍反向代理配置 1、基础配置…

Windows上面搭建Flutter Android运行环境

Windows 上面搭建 Flutter Android 运 行环境(适用于 Flutter3.7.3之后的版本)。 提示: Flutter3.7.x 之前的版本配置请参考教程,或者参考文档《 Flutter Android 开发环境搭建,适用于 Flutter3.3.10之前的版本》。 …

MySQL-SQL(DDL、DML、DQL、DCL)

一、 MySQL启动: MySQL客户端连接: 二、SQL 1.SQL通用语法 (1) SQL语句可以单行或多行书写,以分号结尾。 (2) SQL语句可以使用空格/缩进来增强语句的可读性。 (3) MySQL数据库的SQL语句不区分大小写,关键字建议使…

宣城自闭症咨询寄宿学校:为家庭提供专业支持

宣城与广州的自闭症教育探索:星贝育园为家庭提供专业支持 在自闭症儿童教育的广阔领域中,寄宿学校作为一种特殊而重要的教育模式,正逐渐展现出其独特的价值和意义。虽然本文标题提及了宣城的自闭症咨询寄宿学校,但我们的焦点将转…

UE4_Niagara基础实例—4、静态网格体表面生成粒子

效果图: 分析:在物体面上生成粒子,改变粒子的不透明度,让粒子收到力,并添加紊乱,类似于水蒸气。 操作步骤: 1、创建个niagara 系统,使用模版 simple sprite burst。简单调节参数。…

【算法】链表:160.相交链表(easy)+双指针

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法(双指针) 返回结果 算法正确性 时间复杂度 4、代码 1、题目链接 160. 相交链表 - 力扣(LeetCode) 2、题目介绍 ​ 3、解法(…

[C#]C# winform部署yolov11目标检测的onnx模型

yolov11官方框架:https://github.com/ultralytics/ultralytics 【测试环境】 vs2019 netframework4.7.2 opencvsharp4.8.0 onnxruntime1.16.2 【效果展示】 【实现部分代码】 using System; using System.Collections.Generic; using System.ComponentModel;…

安卓真机调试“no target device found“以及“ INSTALL_FAILED_USER_RESTRICTED“两个问题的解决办法

目录 1 no target device found问题解决办法 2 “INSTALL_FAILED_USER_RESTRICTED”解决办法 使用android studio 2023.2.1.23windows版本。手机为小米K70 Pro 1 no target device found问题解决办法 参考小米手机如何开启usb调试功能? (baidu.com) 1 联接手机…

Pikachu-File Inclusion-远程文件包含

远程文件包含漏洞 是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的,因此漏洞一旦存在,危害性会很大。但远程文件包含漏洞的利用条件较为苛刻;因此,在web应用系统的功能设计上尽量不要让前端用户直接传变…

Pikachu-Sql-Inject -基于boolian的盲注

基于boolean的盲注: 1、没有报错信息显示; 2、不管是正确的输入,还是错误的输入,都只显示两种情况,true or false; 3、在正确的输入下,输入and 1 1/and 1 2发现可以判断; 布尔盲注常用函数&…

【论文笔记】Visual Instruction Tuning

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Visual Instruction Tunin…

关于 JVM 个人 NOTE

目录 1、JVM 的体系结构 2、双亲委派机制 3、堆内存调优 4、关于GC垃圾回收机制 4.1 GC中的复制算法 4.2 GC中的标记清除算法 1、JVM 的体系结构 "堆"中存在垃圾而"栈"中不存在垃圾的原因: 堆(Heap) 用途:堆主要用于存储对象实例和数组。在Java中…

微服务_3.微服务保护

文章目录 一、微服务雪崩及解决方法1.1、超时处理1.2、仓壁模式1.3、断路器1.4、限流 二、Sentinel2.1、流量控制2.1.1、普通限流2.1.2、热点参数限流 2.2、线程隔离 一、微服务雪崩及解决方法 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个…

关于CSS 案例_新闻内容展示

新闻要求 标题:居中加粗发布日期: 右对齐分割线: 提示, 可以使用 hr 标签正文/段落: 左侧缩进插图: 居中显示 展示效果 审核过不了&#xff0c;内容没填大家将就着看吧。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset&qu…

安卓13设置删除网络和互联网选项 android13隐藏设置删除网络和互联网选项

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改4.1修改方法14.2修改方法25.编译6.彩蛋1.前言 有些客户不想让用户修改默认的网络配置,禁止用户进入里面调整网络相关的配置。 2.问题分析 像这个问题,我们有好几种方法去处理,这种需求一般…

【Nacos架构 原理】内核设计之Nacos一致性协议

文章目录 Nacos一致性协议为什么需要一致性协议Nacos选择了Raft&#xff08;强一致性&#xff09;&Distro&#xff08;最终一致性&#xff09;服务发现角度配置管理角度 Nacos自研Distro协议背景设计思想数据初始化数据校验写操作读操作 Nacos一致性协议 为什么需要一致性…

LabVIEW 成绩统计系统

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

vgg19提取特征

一般来说&#xff0c;大家使用VGG16&#xff0c;用的是第四列的网络架构&#xff0c;而使用VGG19&#xff0c;使用的就是第六列的网络架构。 使用vgg进行提取特征&#xff0c;在这个项目中&#xff0c;使用的就是每一块卷积层的第一层。 import torch.nn as nn from torchvis…

GWAS分析中显著位点如何注释基因:excel???

大家好&#xff0c;我是邓飞。 今天星球的小伙伴问了一个问题&#xff1a; 我现在在做GWAS分析&#xff0c;现在已经找到性状关联的SNP位点&#xff0c;下一步我如何根据position 找到基因呢&#xff1f; 关于基因注释&#xff0c;之前写过一些博客&#xff0c;可以用到的软件…

【综合性渗透利器】- TscanPlus

如果你在寻找一款轻量级、实用且开源的漏洞扫描工具&#xff0c;那么 TscanPlus 绝对值得一试。这款工具由 TideSec 团队打造&#xff0c;以其简洁、高效、易用的特点&#xff0c;广受好评&#xff0c;目前在github上拥有1.5k star。 为什么推荐 TscanPlus&#xff1f; 无论你…