关系数据库理论【数据库系统概论】

news2024/11/24 16:09:46

1.问题的提出

1.1关系模式的表示

关系模式由五部分组成,是一个五元组:R(U,D,DOM,F)

元组概念
R关系名R是符号化的元组语义。
UU为一组属性。比如学号,姓名。
DD为属性组U中的属性所来自的域。比如年龄的取值范围。
DOMDOM为属性到域的映射。具体的取值。
FF为属性组U上的一组数据依赖。

【说明】
(1)由于D、DOM与模式设计关系不大,因此在本章中把关系模式看作一一个三元组: R<U、F>。R就相当于表的名字,U就是表中的每个字段属性,F就是每个字段之间的属性关系。
(2)当且仅当U上的一个关系r满足F时,r称为关系模式R<U,F>的一个关系。r就相当于实际的值之间的关系。
(3)作为二维表,关系要符合一个最基本的条件:每个分量必须是不可分开的数据项。满足了这个条件的关系模式了就属于第一范式(1NF)。每一行可能叫元组也有的叫记录

1.2 数据依赖

数据依赖是一个关系内部属性与属性之间的一种约束关系是通过属性间值的相等与否体现出来的数据间相互联系。

数据依赖的主要类型:

  • 函数依赖(Funct ional Dependency, 简记为FD)
  • 多值依赖(Multi-Valued Dependency,简记为MVD)

1.3.函数依赖在现实生活中的体现

例1:
描述一个学生关系,可以有学号、姓名、系名等属性。一个学号只对应一个学生,一个学生只在一个系中学习,“学号”确定后,学生的姓名及所在系的值就被唯一确定。
Sname=f (Sno),
Sdept=f (Sno)即Sno函数决定Sname, Sn确定Sdept,
记作Sno->Sname, Sno-> Sdept.

例2:
建立一个描述学校教务的数据库。涉及的对象包括:学生的学号、(Sno) 、所在系(Sdept)、系主任姓名(Mname) 、课程号(Cno)、成绩(Grade)。。
假设学校教务的数据库模式用一个单一的关系模式Student来表示,则该关系模式的属性集合为:
U= {Sno, Sdept, Mname, Cno, Grade}

现实世界的已知事实(语义) :

  • 一个系有若干学生,但-一个学生只属于一个系;
  • 一个系只有一名(正职)负责人;
  • 一个学生可以选修多门课程,每门课程有若干学生选修:
  • 每个学生学习每一门课程有一一个成绩。

由此可得到属性组U.上的一-组函数依赖F:
F= {Sno->Sdept, Sdent -> Mname, (Sno,Cno)->Grade}
在这里插入图片描述

1.4 函数依赖中存在的问题

  • 数据冗余
  • 更新异常
  • 插入异常
  • 删除异常

为了解决这些问题就需要使用到规范

2.规范化

2.1 函数依赖

【定义1】设R (U)是属性集U上的关系模式,X、 Y是U的子集。若对于R (U)的任意一个可能的关系r,r中不可能存在两个元组上的属性值相等,而在Y上的属性值不等,则称“X函数确定Y”或“Y函数依赖于X”,记作X->Y。

函数依赖有以下5种:

依赖关系概念数学表示
非平凡函数依赖X → \rightarrow Y,但Y ⊊ \subsetneq X
平凡函数依赖X → \rightarrow Y,但Y ⊆ \subseteq X
决定因素X → \rightarrow Y,则X称之为函数依赖的决定因素
完全函数依赖X → \rightarrow Y,并且对X集合中的任何真子集X’,都有X’ ↛ \nrightarrow Y,即Y依赖于X中的所有属性。 X → F Y X\overset{F}{\rightarrow}Y XFY
部分函数依赖X → \rightarrow Y,但又不完全依赖X的属性 X → P Y X\overset{P}{\rightarrow}Y XPY
传递函数依赖在R(U)中,如果X → \rightarrow Y(Y ⊊ \subsetneq X),Y ↛ \nrightarrow X,Y → \rightarrow Z,Z ⊊ \subsetneq Y,则称Z对X是传递依赖 X → 传递 Y X\overset{传递}{\rightarrow}Y X传递Y
直接函数依赖如果在传递函数依赖中的X ← → \leftarrow\rightarrow ←→Y,则X就是直接能推出Z,称之为直接函数依赖

【例】Student (Sno, Sname, Ssex, Sage, Sdept)。
假设不允许重名,则有:
Sno ->Ssex, Sno–>Sage, Sno->Sdept, Sno->Sname
Sname->Ssex, Sname->Sage, Sname ->Sdept。
但Ssex->Sage, Ssex ↛ \nrightarrow Sdept。

2.2 码

码是关系模式中的一个重要概念。在数据库中有以下几种码:

概念
候选码设K为R<U, F>中的属性或属性组合,若 K → F F K\overset{F}{\rightarrow}F KFF,则K为R的候选码
超码设K为R<U, F>中的属性或属性组合,,如果U部分函数依赖于K,即K-U,则K称为超码( Surpkey)。 候选码是最小的超码,即K的任意一个真子集都不是候选码。
主码若候选码多于一个, 则选定其中的一个为主码(primary key)。
主属性包含在任何一个候选码中的属性称为主属性(primeattribute)
非主属性\非码属性不包含任何候选码中的属性称为非主属性(nonprime attribute)或非码属性(non-key attribute)。
全码整个属性都是码,则称为全码

2.3 第一范式(1FN)

【定义】数据表中的每一个属性都不可再分,就属于第一范式。比如说价格可以分为售价和进价,就不能直接用价格来表示,必须单独把他们进行表示。

2.4 第二范式(2FN)

【定义】若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF。

【例子】S-L-C(Sno, Sdept, Sloc, Cno, Grade), Sloc为学生的住处,并且每个系的学生住在同一个地方。S-L-C的码为(Sno, Cno)。
函数依赖有:
(Sno, Cno) → F \overset{F}{\rightarrow} F Grade
Sno→Sdept, (Sno, Cno) → F \overset{F}{\rightarrow} FSdept
Sno → \rightarrow Sloc, (Sno, Cno) → P \overset{P}{\rightarrow} PSIoc
Sdept → \rightarrow Sloc

在这里插入图片描述
【说明】
①图中虚线表示部分函数依赖。
②非主属性Sdept、Sloc并不完全依赖于码。
③关系模式S-L-C不属于2NF。
因为在候选依赖中,非主属性(Sdep)部分依赖于候选码(Cno),所以不满足第二范式。
不满足2FN的会产生插入异常删除异常修改复杂等问题。

出现这种问题的原因:
例子中有两类非主属性: -类如Grade,它对码完全函数依赖,另一类如Sdept、Sloc, 它们对码不是完全函数依赖。
解决方法:
用投影分解把关系模式S-L-C分解成两个关系模式。
SC (Sno, Cno, Grade)。
S-L (Sno, Sdept, Sloc)。
在这里插入图片描述
SC的码为(Sno, Cno),SL的码为Sno,这样使得非主属性对码都是完全函数依赖了。

2.5 第三范式(3FN)

[定义7]设关系模式R<U, F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z (ZPY),使得X-→Y,Y→Z成立,Y → \rightarrow X不成立,则称R<U, F>∈3NF。即第三范式中不能有传递依赖。
[例] SC没有传递依赖,因此SC∈3NF。
S-L中Sno → \rightarrow Sdept (Sdept ↛ \nrightarrow Sno),Sdept → \rightarrow Sloc,
传递
可得Sno → 传递 \overset{传递}{\rightarrow} 传递 Sloc.
解决的办法是将S-L分解成:
S-D (Sno, Sdept) ∈ 3NF。
D-L (Sdept, Sloc) ∈3NF。

2.6 BC范式(BCNF)

BCNF (Boyce Codd Normal Form) 由Boyce和Codd提出, 比3NF更进了一步。通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。
【定义8】设关系模式R<U, F>∈1NF,若X→Y且Y ⊄ \not\subset X时X必含有码,则R<U, F> 属于BCNF。换言之,在关系模式R<U, F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。

BCNF的关系模式所具有的性质:
(1)所有非主属性都完全函数依赖于每个候选码。比如能X → \rightarrow Y,Y必须完全依赖于X中任何一个属性。
(2)所有主属性都完全函数依赖于每个不包含它的候选码。
(3)没有任何属性完全函数依赖于非码的任一组属性。
如果一个关系数据库中的所有关系模式都属于BCNF,那么数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规程度,消除了插入异常和删除异常。

【例1】考察关系模式C (Cno, Cname, Pcno),它只有一个码Cno,没有任何属性对Cno部分依赖或传递依赖,F所以C∈3NF。同时中Cno是唯一的决定因素 ,所以C∈BCNF。Cno是课程编号,Cname是课程名字,Pcno是课程先导课。
由题知Cno → \rightarrow Cname,Cno → \rightarrow Pcno。

【例2】关系模式S (Sno, Sname, Sdept, Sage),假定Sname也具有唯一性,那么S就有两个码,这两个码都由单个属性组成,彼此不相交。其他属性不存在对码的传递依赖与部分依赖,所以S∈3NF。同时S中除Sno, Sname外没有其他决定因素,所以S也属于BCNF。
由题知:
Sno → \rightarrow Sname
Sname → \rightarrow Sno
则Sno ← → \leftarrow\rightarrow ←→Sname
Sno → \rightarrow Sdept
Sno → \rightarrow Sage

小结:

范式简单概念
1FN属性不可再分
2FN不存在部分依赖
3FN不存在传递依赖
BCFN在满足三大范式的条件下,没有属性依赖于非码属性

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

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

相关文章

用css实现原生form中radio单选框和input的hover已经focus的样式

一.问题描述&#xff1a;用css实现原生form中radio单选框和input的hover已经focus的样式 在实际的开发中&#xff0c;一般公司ui都会给效果图&#xff0c;比如单选按钮radio样式&#xff0c;input输入框hover的时候样式&#xff0c;以及focus的时候样式&#xff0c;等等&#…

京东API接口获取京东平台商品详情数据,SKU,价格参数及其返回值说明

做过淘客开发的一定接触过淘宝API开发。 而做京东联盟软件自然离不开京东联盟API。 京东联盟API目前上线的有很多。 参数说明 通用参数说明 url说明 https://api-gw.onebound.cn/平台/API类型/ 平台&#xff1a;淘宝&#xff0c;京东等&#xff0c; API类型:[item_search,ite…

CRM系统定制开发价格

我们都知道&#xff0c;CRM系统对企业有着很大的帮助。但是市面上大多数CRM系统都是标准化的&#xff0c;无法满足那些产品线复杂&#xff0c;或者有着特殊需求的企业。这个时候&#xff0c;就需要对CRM系统进行二次开发。那么&#xff0c;CRM系统二次开发的价格是多少&#xf…

RK3568 AD按键改成GPIO按键

authordaisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 相对路径 kernel/arch/arm64/boot/dts/rockchip/ido-evb3568-v2b.dtsi 代码解析 linux,input-type <1>;//input类型 <EV_KEY>按键 即1 gpios <&gpio1 RK_PB2 GPIO_ACTIVE_HIGH>;//io脚地址…

OpenHarmony Meetup北京站招募令

OpenHarmony Meetup城市巡回北京站火热来袭&#xff01;&#xff01;日期&#xff1a;2023年11月25日14:00地点&#xff1a;中国科学院软件园区五号楼B402与OpenHarmony技术大咖近距离互动&#xff0c;分享技术见解&#xff0c;结交志同道合的朋友&#xff01;活动主题聚焦Open…

UI 自动化测试框架设计与 PageObject 改造!

在 UI 自动化测试过程中&#xff0c;面对复杂的业务场景&#xff0c;经常会遇到这样的挑战&#xff1a; 简单的录制/回放速度快&#xff0c;但无法适应复杂场景&#xff1b;编写自动化测试脚本比较灵活&#xff0c;但工作量大且可维护性差&#xff1b;以往的封装技术&#xff…

本地搭建Stackedit Markdown编辑器结合内网穿透实现远程访问

文章目录 1. docker部署Stackedit2. 本地访问3. Linux 安装cpolar4. 配置Stackedit公网访问地址5. 公网远程访问Stackedit6. 固定Stackedit公网地址 StackEdit是一个受欢迎的Markdown编辑器&#xff0c;在GitHub上拥有20.7k Star&#xff01;&#xff0c;它支持将Markdown笔记保…

【AI】行业消息精选和分析(23-11-20)

技术发展 &#x1f3a8; LCM即时绘画&#xff0c;体验所见所得&#xff1a; - LCM LoRA支持即时绘图生成&#xff0c;体验直观。 - 在线体验地址提供直接访问。 - 清华大学SimianLuo开发&#xff0c;加速稳定扩散模型运行。 &#x1f48a; VM Pill&#xff1a;可吞咽装置追踪生…

CPU/GPU实现向量内积

向量内积&#xff08;点乘/点积/数量积&#xff09;&#xff1a;两个向量对应元素相乘之后求和&#xff1a; CPU实现&#xff1a; //cpu 实现一下向量内积#include<stdio.h> template<typedef T> void dot_mul(T *a, T *b, T *c, int n) { double tmp 0;for(i…

为什么同样是做测试,别人年薪30W+?我10k!!!

作为一名初出茅庐的软件测试员&#xff0c;职业发展的道路的确蜿蜒曲折&#xff0c;面对一次次的岗位竞争&#xff0c;挑战一道道的面试关卡&#xff0c;一边带着疑惑&#xff0c;一边又要做出选择&#xff0c;只能无奈的感叹&#xff1a;比你优秀的人比你还努力&#xff0c;你…

mysql主从搭建(docker)

一、主从概述 MySQL主从又叫Replication、AB复制。简单讲就是A与B两台机器做主从后&#xff0c;在A上写数据&#xff0c;另外一台B也会跟着写数据&#xff0c;实现数据实时同步。有这样几个关键点&#xff1a; 1&#xff09;MySQL主从是基于binlog&#xff0c;主上需开启binl…

“一键搜索,海量商品任你选!多平台聚合,购物更便捷!“

对于多平台聚合搜索&#xff0c;根据关键词取商品列表&#xff0c;您需要使用第三方服务或软件来实现。以下是一些可能的选择&#xff1a; 使用第三方聚合搜索工具&#xff1a;有些第三方工具可以聚合多个电商平台的商品数据&#xff0c;并提供统一的搜索接口。您可以使用这些…

机器人制作开源方案 | 钻孔植树一体化沙漠车

作者&#xff1a;徐邦国、张博宇、刘露、李晶晶、吕洁秀单位&#xff1a;天津职业技术师范大学 机械工程学院指导老师&#xff1a;何永利 摘要&#xff1a;本项目旨在设计一种专用于沙漠植树的植树车&#xff0c;以沙漠自动化植树为研究对象&#xff0c;提出一种创新式钻…

初识分布式键值对存储etcd

欢迎大家到我的博客浏览。胤凯 (oyto.github.io)大家好&#xff0c;今天我带大家来学习一下 etcd。 一、什么是 etcd etcd 是一个开源的分布式键值存储系统&#xff0c;主要用于构建分布式系统中那点服务发现、配置管理、分布式锁等场景。它采用 Raft 一致性算法来确保所有节…

Swagger(5):Swagger2常用注解

1 Api Api是类上注解。控制整个类生成接口信息的内容。 tags&#xff1a;类的名称。可以有多个值&#xff0c;多个值表示多个副本。description:描述&#xff0c;已过时。 注解如下&#xff1a; Api(tags {"MyController","Swagger学习控制器"}, desc…

详解SwinIR的论文和代码(SwinIR: Image Restoration Using Swin Transformer)

paper&#xff1a;https://arxiv.org/abs/2108.10257 code&#xff1a;https://github.com/JingyunLiang/SwinIR 目录 1. Swin Transformer layers1.1 局部注意力1.2 移动窗口机制1.3 关键代码理解 2. 整体网络结构2.1 浅层特征提取2.2 深层特征提取2.3 图像重建 3.总结 SwinI…

服务器探针-serverstatus

{alert type"info"} 之前给大家介绍过一个简单的服务器监控。uptime-kuma 今天给各位带来一个酷炫的多服务器探针和多服务器监控。ServerStatus {/alert} 作者的开源项目地址如下&#xff1a;https://github.com/cppla/ServerStatus 作者的项目体验地址如下 https://…

运动耳机什么牌子好?十大运动蓝牙耳机品牌排行榜

​运动耳机需求各有不同&#xff0c;对于我们每个人来说&#xff0c;选择最适合自己的耳机是一项重要任务。在这个耳机类型繁多&#xff0c;五花八门的时代&#xff0c;如何找到一款适合自己的运动耳机呢&#xff1f;选对运动耳机很重要&#xff0c;所以接下来安利五款相当不错…

element-ui中怎样使用iconfont的图标

1 登录 https://www.iconfont.cn/ 2 搜索合适的图 这里可以找到这个图所在的图库。这样就可以一次查找到对应的所有同款图标 3 选择同款加入购物车 4 将购物车的icon加入项目&#xff0c;注意是新建项目&#xff0c;除非你是确定需要前面已经加过的icon 5 下载icon 选择fon…

SpringBoot的启动流程

一、SpringBoot是什么&#xff1f; springboot是依赖于spring的&#xff0c;比起spring&#xff0c;除了拥有spring的全部功能以外&#xff0c;springboot无需繁琐的xml配置&#xff0c;这取决于它自身强大的自动装配功能&#xff1b;并且自身已嵌入Tomcat、Jetty等web容器&am…