关系数据库设计理论中,起核心作用的是_关系数据库设计理论主要包括

关系数据库设计理论中,起核心作用的是_关系数据库设计理论主要包括关系数据库设计理论设计一个好的关系数据库系统,关键是要设计一个好的数据库模式(数据库逻辑设计问题)数据库逻辑设计主要解决的问题关系数据库应该组织成几个关系模式关系模式中包括哪些属性“不好”的数据库设计举例:为学校设计一个关系数据库关系模式:UN(Sno,Cno,G,Sdept,MN)Sno:描述学生Sdept:描述系名MN:描述系…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

关系数据设计理论

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

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

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

关系模式中包括哪些属性

“不好”的数据库设计

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

关系模式: 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规范化
        这里写图片描述
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181256.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 5.6(java学习笔记) queue

    5.6(java学习笔记) queue

  • mysql修改root用户密码语法为_设置mysql的root密码

    mysql修改root用户密码语法为_设置mysql的root密码知道密码在清楚的知道密码的情况之下可以使用以下几种方式修改MySQL的密码。方式一登录mysql

  • 2268大约是多少_情态动词过去式

    2268大约是多少_情态动词过去式小 Q 在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字 1,2,3… 进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在且仅存在一条通路(通路指连接两个元件的导线序列)。在电路板上存在一个特殊的元件称为“激发器”。当激发器工作后,产生一个激励电流,通过导线传向每一个它所连接的节点。而中间节点接收到激励电流后,得到信息,并将该激励电流传向与它连接并且尚未接收到激励电流的节点。最终,激励电流将到达一些“终止节点”——

  • PyCharm的几个使用技巧(持续更新)[通俗易懂]

    PyCharm的几个使用技巧(持续更新)[通俗易懂]目录引言1、轻松加注释2、让代码自动缩进3、快速自定义文件4、一键全局格式化5、轻松查找与替换6、关闭波浪线引言PyCharm是个十分强大的Python编辑器,笔者在日常的工作中学到了很多该IDE的使用技巧,有的是从别人那里学到的,有的是自己学习的。you  以下将介绍几个简单的PyCharm使用技巧。以windows系统中的PyCharm使用为例。1、轻松加注释多行注释:CTRL+/…

  • Chrome断点调试

    Chrome断点调试1.断点调试是啥?难不难?断点调试其实并不是多么复杂的一件事,简单的理解无外呼就是打开浏览器,打开sources找到js文件,在行号上点一下罢了。操作起来似乎很简单,其实很多人纠结的是,是在哪里打断点?(我们先看一个断点截图,以chrome浏览器的断点为例)步骤记住没?用chrome浏览器打开页面→按f12打开开发者工具→打开Sources→打开你要调试的js代码文件→在行号上单击…

  • httpclient4.X 设置代理请求(包含账号密码)[通俗易懂]

    httpclient4.X 设置代理请求(包含账号密码)[通俗易懂]最近需要使用Httpclient做后台请求,使用的是httpclient4.3版本,apache网站上有,我这里就不提供下载链接了,搜一下就可以了,废话少说,直接上代码:Java代码  import java.util.ArrayList;  import java.util.List;    import org.apache.http.HttpEntit

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号