数据库SQL---范式
1、数据冗余导致的问题:冗余存储、更新异常、插入异常、删除异常。
2、函数依赖:一种完整性约束。
在关系模式r(R)中,α属于R,β属于R。
1)α函数确定β(β函数依赖于α):记作α→β,对于任意合法关系r及其中任两个元组ti和tj,i≠j,若ti[α]=tj[α],则ti[β]=tj[β]。
2)非平凡函数依赖和平凡函数依赖:若α→β,但β不属于α,则称α→β是非平凡函数依赖;否则,若β不属于α,则称α→β是平凡函数依赖。
非平凡函数依赖 平凡函数依赖
3)完全函数依赖和部分函数依赖:α→β是非平凡函数依赖,若对任意的γ含于α,γ→β都不成立,则称α→β是完全函数依赖,简称完全依赖;否则,若存在非空的γ含于α,使γ→β成立,则称α→β是部分函数依赖,简称部分依赖。
部分依赖α→β的依赖图
4)传递函数依赖
γ属于R,若α→β,β→γ,则必存在函数依赖α→γ,若α→β,β→γ和α→γ都是非平凡函数依赖,且β不依赖于α,则称α→γ是传递函数依赖,简称传递依赖。
传递依赖α→γ的依赖图
3、函数依赖集闭包
1)逻辑蕴涵:若给定函数依赖集F,可以证明其他函数依赖也成立,则称这些函数依赖被F逻辑蕴涵。
2)闭包:令F为一函数依赖集,F逻辑蕴涵的所有函数依赖组成的集合称为F的闭包,记为F+。
3)属性集A的闭包:令r(R)为关系模式,F为属性依赖集,A属于R的属性集,则称在函数依赖集F下由A函数确定的所有属性的集合为F下属性集A的闭包,记为A+。
4)Armstrong公理及推论(可直接计算F+)
(1)自反律:若存在β属于α,则有α→β。
(2)增补律:若存在α→β,则有γα→γβ。
(3)传递律:若存在α→β且β→γ,则有α→γ。
(4)合并律:若存在α→β且α→γ,则有α→βγ。
(5)分解律:若存在α→βγ,则有α→β和α→γ。
(6)伪传递律:若存在α→β且βγ→δ,则有αγ→δ。
4、范式(关系模式要满足的条件)
1)目的:消除存储异常、减少数据冗余、保证数据完整性和存储效率。
2)基于函数依赖理论,范式的分类:
(1)第一范式(1NF)---码
如果一关系模式r(R)的每个属性对应的域值都是不可分的,则称r(R)属于第一范式。
目标:将基本数据划分成称为实体集或表的逻辑单元,当设计好每个实体后,需要为其指定主码。
empno | ename | address | ||
province | city | street |
非规范化的关系模式(地址的值域可分)
empno | ename | province | city | street |
1NF规范化后的关系模式
(2)第二范式(2NF)---全部是码
如果一关系模式r(R),α属于r(R),若α包含在r(R)的摸个候选码中,则称α为主属性,否则α非主属性。
如果一关系模式r(R)属于第一范式,且所有非主属性都完全函数依赖于r(R)的候选码,则称r(R)属于第二范式。
目标:将只部分依赖于候选码(即依赖于候选码的部分属性)的非主属性通过关系模式分解移到其他表中去。
(3)第三范式(3NF)---仅仅是码
如果一关系模式r(R)属于第二范式,且所有非主属性都直接函数依赖于r(R)的候选码,且非主属性之间不存在依赖关系(即不存在非主属性传递依赖于候选码),则称r(R)属于第三范式。
目标:将只部分依赖于候选码(即依赖于候选码的部分属性)的非主属性通过关系模式分解移到其他表中去。
(4)Boyce-Codd范式(BCNF)
给定关系模式r(R)及函数依赖集F,若F+中的所有函数依赖α→β(α属于R,β属于R)至少满足下列条件之一:α→β是平凡函数依赖(即β属于α)、α是r(R)的一个超码(即α+包含R的全部属性),则称r(R)属于Boyce-Codd范式。
数据库SQL---范式的更多相关文章
- 关于数据库SQL优化
1.数据库访问优化 要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?而大多数情况性能最慢的设备会是瓶颈点,如下载时网络速度可能会是瓶颈点,本地复制文件 ...
- Oracle 数据库SQL性能查看
作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看 ...
- 你用什么方法检查 PHP 脚本的执行效率(通常是脚本执行时间)和数据库 SQL 的效率(通常是数据库 Query 时间), 并定位和分析脚本执行和数据库查询的瓶颈所在?
php: 一般是在你要检查的代码开头记录一个时间,结尾记录一个时间.取差值, 数据库SQL的效率 sql的explain(mysql),启用slow query log记录慢查询. 通常还要 ...
- 数据库SQL Server与C#中数据类型的对应关系
ylbtech- .NET-Basic:数据库SQL Server与C#中数据类型的对应关系 数据库SQL SServer与C#中数据类型的对应关系 1.A,返回顶部 数据库 C#程序 int int ...
- 我的mysql数据库sql优化原则
原文 我的mysql数据库sql优化原则 一.前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待. ...
- 学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)
学生选课数据库SQL语句45道练习题: 一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...
- 数据库sql优化方案
声明:这个不是我自己写的,是我们老师给我,我拿出来分享一下! 为什么要优化: 随着实际项目的启动,数据库经过一段时间的运行,最初的数据库设置,会与实际数据库运行性能会有一些差异,这时我们 ...
- 数据库 SQL Server2012安装步骤详解
这篇文章主要给大家讲解一下数据库SQL Server2012的安装步骤(若有雷同纯属巧合,还望谅解!) 在正式安装之前,我们需要进行两个设置: ① 首先需要关闭Windows防火墙,若不关闭,后续的安 ...
- 数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接
前言 DataGrip:Jet Brains出品的一款数据库管理工具(没错,是Jet Brains出品,必属精品).DataGrip整合集成了当前主流数据库(如:SQL Server, MySQL, ...
- 数据库SQL的多表查询
数据库 SQL 的多表查询:eg: table1: employees, table2: departments,table3: salary_grades; 一:内连接: 1):等值连接: 把表em ...
随机推荐
- JAVA debug 断点调试
更多调试参看 https://www.cnblogs.com/yjd_hycf_space/p/7483471.html 先编译好要调试的程序.1.设置断点 选定要设置断点的代码行,在行号的区域后面单 ...
- String 对象-->substr() 方法
1.定义和用法 substr() 方法可在字符串中抽取从 开始 下标开始的指定数目的字符. 语法: string.substr(start,length) 参数: start:提取开始下标 lengt ...
- 11-JS变量
一. JavaScript 是什么 JavaScript是一种运行在客户端(浏览器)的脚本语言 客户端:客户端是相对于服务器而言的,在这里先简单理解为浏览器 浏览器就是一个客户端软件,浏览器从服务器上 ...
- 通过String的不变性案例分析Java变量的可变性
阅读本文之前,请先看以下几个问题: 1.String变量是什么不变?final修饰变量时的不变性指的又是什么不变,是引用?还是内存地址?还是值? 2.java对象进行重赋值或者改变属性时在内存中是如何 ...
- jQuery+ajax实现滚动到页面底部自动加载图文列表效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Python列表介绍,最常用的Python数据类型
文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:数据杂论 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获 ...
- 这价格看得我偷偷摸了泪——用python爬取北京二手房数据
如果想了解更多关于python的应用,可以私信我,或者加群,里面到资料都是免费的 http://t.cn/A6Zvjdun 近期,有个朋友联系我,想统计一下北京二手房的相关的数据,而自己用Excel统 ...
- L21 Momentum RMSProp等优化方法
airfoil4755 下载 链接:https://pan.baidu.com/s/1YEtNjJ0_G9eeH6A6vHXhnA 提取码:dwjq 11.6 Momentum 在 Section 1 ...
- CodeForces - 855B ring 前缀和
邓布利多教授正在帮助哈利摧毁魂器.当他怀疑一个魂器出现在那里时,他去了冈特沙克.他看到Marvolo Gaunt的戒指,并将其确定为魂器.虽然他摧毁了它,但仍然受到诅咒的影响.斯内普教授正在帮助邓布利 ...
- 详解 方法的覆盖 —— toString() 与 equals()的覆盖
在学习本篇博文前,建议先学习完本人的博文--<详解 继承(上)-- 工具的抽象与分层> 在本人之前的博文中曾讲过"基类"的知识,那么,本篇博文中的主题--Object类 ...