2024022401-关系数据库设计理论

关系数据库设计理论

在这里插入图片描述

设计一个好的关系数据库系统,关键是要设计一个好的数据库模式(数据库逻辑设计问题)

数据库逻辑设计主要解决的问题

关系数据库应该组织成几个关系模式

关系模式中包括哪些属性

“不好”的数据库设计

举例:为学校设计一个关系数据库

关系模式: UN(Sno,Cno,G,Sdept,MN)

  • Sno:描述学生
  •     Sdept:描述系名
    
  •     MN:描述系主任
    
  •     Cno:描述课程
    
  •     G:描述学习成绩
    
  • 根据对现实世界的分析,可得出:Sno,Cno是码
  • 按照关系模式UN装入部分数据

对数据库操作时,会出现以下问题

    1. 数据冗余(系主任名的存储次数)
    • 数据重复存储:浪费存储空间,数据库维护困难(更新异常)
    1. 插入异常(一个系刚成立)
    • 主码为空的记录不能存在与数据库,导致不能进行插入操作
    1. 删除异常(一个系的学生全部毕业)
    • 删除操作后,一些相关信息无法保存在数据库中
      

要消除以上的“弊病”,把上面的关系数据库模式分解为三个关系模式

  • S(Sno,Sdept)
  • SG(Sno,Cno,G)
    
  • Dept(Sdept,MN)
    

函数依赖

类似于变量之间的单值函数关系

Y=F(X),其中自变量X的值,决定一个唯一的函数值Y

在一个关系模式里的属性,由于它在不同元组里属性值可能不同,由此可以把关系中的属性看作变量

一个属性与另一个属性在取值上可能存在制约关系

函数依赖就是属性间的逻辑依赖关系

定义1 设R(U)是一个关系模式,U是R的属性集合,X和Y是U的子集.对于R(U)的任何一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同,而在Y上的属性值不同,则称X函数决定Y,或Y函数依赖于X,记作:X Y.

X通常称为“决定因素”

几点说明

    1. 函数依赖是语义范畴的概念.它反映了一种语义完整性约束,只能根据语义来确定一个函数依赖.
    1. 函数依赖是指关系R模式的所有关系元组均应满足的约束条件,而不是关系模式中的某个或某些元组满足的约束条件
    1. 函数依赖与属性间的联系类型有关
    • (1)若属性X和Y之间有“一对一”的联系,
    • (2)若属性X和Y之间有“多对一”的联系,
    • (3)若属性X和Y之间有“多对多”的联系,
    1. 如果X Y,并且Y不是X的子集,则称X Y是非平凡的函数依赖;如果Y是X的子集,则称X Y是平凡的函数依赖;

完全函数依赖与部分函数依赖

完全函数依赖

部分函数依赖

码的形式定义

候选码的两个性质

    1. 标识的唯一性: 对于R(U)中的每一元组,K的值确定后,该元组就相应确定了.
    1. 无冗余性: K是属性组的情况下,K的任何一部分都不能唯一标识该元组(定义中的完全函数依赖的意义)

规范化

简介

  • 用几个简单的关系去取代原来结构复杂的关系的过程叫做关系规范化.
  • 规范化理论是研究如何把一个不好的关系模式转化为好的关系模式的理论
  • 规范化理论是E.E.Codd在1971年首先提出的
  • 规范化理论是数据库设计过程中的一个非常有用的辅助工具

范式

  • 简介
    • 规范化理论是围绕着范式建立的.
    • 满足不同程度要求的约束集则称为不同的范式.
    • 如果一个关系满足某个指定的约束集,则称它属于某个特定的范式.
    • 较高层次的范式比较低层次的范式具有“更合乎要求的性质”
    • 一个低一级范式的关系模式,通过投影运算可以转化为若干个高一级范式的关系模式的集合,这个过程叫做规范化.
    • 如果一个关系满足某个范式要求,则它也会满足较其级别低的所有范式的要求
  • 范式层次
  • 第一范式(1NF)
    • 定义5: 在关系模式R中的每一个具体关系r中,如果每个属性值都是不可再分的最小数据单位,则称R是第一范式的关系,记作R∈1NF.
    • 数据库理论研究的是规范化关系.
    • 1NF规范化: 把非规范化关系规范提高到1NF关系模式的集合.
  • 第二范式(2NF)
    • 定义6: 若关系模式R∈1NF,且每个非主属性都完全依赖于R的任意候选码,则关系模式R属于第二范式,记作R ∈2NF.
    • 2NF规范化是把1NF关系模式规范提高到变成2NF关系模式的集合.
    • 从1NF中消除非主属性对候选码的部分函数依赖,则获得2NF关系.
    • 举例:UN(Sno,Cno,G,SDN,MN)
  • 第三范式(3NF)
    • 定义7: 若关系模式R∈2NF,且每个非主属性都不传递依赖于R的任意候选码,则R∈3NF.
    • 从2NF关系中,消除非主属性对码的传递依赖函数而获得3NF关系
    • R∈3NF,则每个非主属性既不部分依赖,也不传递依赖于R的任何候选码.
    • 3NF的规范化
  • BCNF范式
    • 3NF的不完善性
      • 定义8: 若R∈1NF,且R中每个决定因素都是候选码,则R ∈BCNF.
      • 满足BCNF的关系将消除任何属性对候选码的部分依赖与传递依赖
      • 应用BCNF定义时,可直接判断1NF是否属于BCNF
      • BCNF规范化
        XMind: ZEN - Trial Version

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

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

相关文章

雷达铅笔波束

黄色区域:铅笔波束 构图思想:先刷黄色三角形,在刷黄色圆 //画波束,//小飞机->扇形区域->铅笔波束painter->save();{ int diameter 26;//第一步先看画家当前坐标原点//测定(17,-2)坐标…

【flutter】环境安装

安装flutter sdk 下载sdk flutter sdk就包含dart,所以我们只用安装flutter sdk就可以了。 我们去清华大学开源软件镜像站下载,flutter开发中,版本对不上基本项目就跑步起来,如果是团队协同开发的话,建议统一下载指定版…

【初中生讲机器学习】12. 似然函数和极大似然估计:原理、应用与代码实现

创建时间:2024-02-23 最后编辑时间:2024-02-24 作者:Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~ 我是 Geeker_LStar,一名初三学生,热爱计算机和数学,我们一起加…

【办公类-16-10-01】“2023下学期 中4班 自主游戏观察记录(python 排班表系列)

背景需求 上学期的周安排里,每班每周的自主游戏会轮到多个不同的内容 因此在每周的自主游戏观察有2次记录,观察的项目可以写不一样的, 如一位老师写沙水游戏,另一位写表演游戏 本学期,中班的自主游戏全部是户外的&am…

vue 手势解锁功能

效果 实现 <script setup lang"ts"> const canvasRef ref<HTMLCanvasElement>() const ctx ref<CanvasRenderingContext2D | null>(null) const width px2px(600) const height px2px(700) const radius ref(px2px(50))const init () > …

滑动窗口刷题(二)

目录 1.最大连续1的个数 III 1.题目解析 2.算法原理 2.1暴力枚举&#xff08;不过多介绍&#xff09; 2.2双指针优化 3.代码编写 2. 将 x 减到 0 的最小操作数 1.题目解析 2.算法原理 2.1滑动窗口 3.代码编写 3. 水果成篮 1.题目解析 2.算法思路 2.1滑动窗口哈希…

基于Android的校园请假App的研究与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

每日五道java面试题之spring篇(五)

目录&#xff1a; 第一题. 使用 Spring 有哪些方式&#xff1f;第二题. 什么是Spring IOC 容器&#xff1f;第三题. 控制反转(IoC)有什么作用?第四题. IOC的优点是什么&#xff1f;第五题. BeanFactory 和 ApplicationContext有什么区别&#xff1f; 第一题. 使用 Spring 有哪…

前沿科技速递——YOLOv9

随着YOLO系列的不断迭代更新&#xff0c;前几天&#xff0c;YOLO系列也迎来了第九个大型号的更新&#xff01;YOLOv9正式推出了&#xff01;附上原论文链接。 arxiv.org/pdf/2402.13616.pdf 同样是使用MS COCO数据集进行对比比较&#xff0c;通过折线图可看出AP曲线在全方面都…

018—pandas 生成笛卡尔积排列组合合并多列字符串数据

思路&#xff1a; 本需求需要将给定的几列数据&#xff0c;生成一个排列组合形式的数据列&#xff0c;利用到 Pandas 多层索引生成的笛卡尔积的方法。 二、使用步骤 1.引入库 代码如下&#xff08;示例&#xff09;&#xff1a; import pandas as pd2.读入数据 代码如下&…

手写redux和applyMiddleware中间件react示例

目录 一 核心代码 1.reducer 2.store.js 二 关于context API的使用 1. MyContext 2. createContext 3. ContextProvider 4. connect 三 组件验证效果 1. Todo 2. TodoList 3.TodoItem 4.TodoInput 5. App组件引入Todo组件 一 核心代码 1.reducer // 新增列表数…

发布订阅模式:观察者模式的一种变体

发布-订阅模型&#xff08;Publish-Subscribe Model&#xff09;的底层机制通常基于观察者模式。 发布-订阅模型是观察者模式的一种变体。 在观察者模式中&#xff0c;主题&#xff08;或被观察者&#xff09;维护了一组观察者&#xff0c;当主题的状态发生变化时&#xff0c…

【Postman+Newman】接口自动化测试以及测试报告输出

Newmanpostman自动化测试 postmanPre-request Script前置脚本 Newman测试报告输出 postman 学习postman脚本编写 Pre-request Script前置脚本 Newman 测试报告输出 输出报告时使用的命令&#xff1a;     -r html,json,junit 指定生成html&#xff0c;json&#xff0c…

零基础学编程,编程简单学,中文编程工具下载及工具箱进度条构件的用法

一、前言 今天给大家分享的中文编程开发语言工具 进度条构件的用法。 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载——常用工具下载——编程工具免费版下载及实例源码下载。 进度条 进度…

设计一个 shell 命令行程序

目录 实现 shell 主要思路 代码&#xff08;Linux&#xff09;系统 实现 shell 主要思路 1、要知道一个 shell 进程在运行起来都会在命令行呈现什么&#xff0c;如图是Xshell 登录成功后的界面&#xff1a;所以第一步要做的就是打印命令行提示符。 Xshell 命令行提示符的组…

Android进阶之旅(第5天)

充实的一天又过去了&#xff0c;今天真的好冷啊&#xff0c;我们这里雪很大&#xff0c;早上最傻逼的决定就是穿了一个短的棉袜出来&#xff0c;漏脚踝&#xff0c;冷成傻子 接下来老规矩&#xff0c;看下昨天计划的完成情况&#xff1a; 今日计划&#xff1a; 1.过bug 2.看…

Vivado MIG ip核使用教程

Step 1 在ip catalog中搜索mig ip核并打开&#xff0c;检查硬件配置 Step 2 Step 3 选择对其他芯片类型的兼容性&#xff0c;若无此方面需求&#xff0c;可直接点击next Step 4 选择存储器类型 Step 5 配置DDR3芯片工作频率、用户时钟、mig ip核输入时钟、DDR3芯片类型…

《隐私计算简易速速上手小册》第2章:关键技术介绍(2024 最新版)

文章目录 2.1 同态加密2.1.1 基础知识2.1.2 主要案例:云计算数据分析2.1.3 拓展案例 1:医疗数据分析2.1.4 拓展案例 2:金融风险评估2.2 安全多方计算(SMC)2.2.1 基础知识2.2.2 主要案例:跨机构金融数据共享2.2.3 拓展案例 1:医疗研究合作2.2.4 拓展案例 2:跨国界数据交…

Echarts —— 关系图+路径图+散点图(动态箭头)

文章目录 1 效果预览2 实现代码 1 效果预览 可将以下代码复制到Echarts示例在线预览效果 2 实现代码 const categories [{name: 数据中心,symbol:path://M936.33 732.203c-9.872-10.814-23.349-17.123-37.953-17.778-14.849-0.451-28.613 4.383-39.427 14.255-0.215 0.195-0.…

【初始RabbitMQ】发布订阅的实现

发布确认原理 生产者将信道设置成 confirm 模式&#xff0c;一旦信道进入 confirm 模式&#xff0c;所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始)&#xff0c;一旦消息被投递到所有匹配的队列之后&#xff0c;broker 就会发送一个确认给生产者(包含消息的…