Mysql学习总结(16)——Mysql之数据库设计规范
一、三大范式
1、第一范式:消除一个字段包含多个数据库值,消除一个记录包含重复的组(单独的一列包含多个项目),即可满足1NF。
2、第二范式:消除部分依赖性即可转化为2NF。部分依赖性表示一个记录中包括的字段只依赖于主键的一部分。解决部分依赖性的最简单方法是将复合主键分成两部分,每一部分表示一个单独的表。
3、第三范式:消除可传递依赖性即可满足3NF。可传递依赖性表示记录中至少一个值不依赖主键,而是依赖于这个记录中的另一个字段。
4、数据库规范化:
1NF:删除重复的组,并确定一个主键或复合主键。
2NF:确定表处于1NF状态,消除任何部分依赖性。
3NF:确定表处于2NF状态,消除任何可传递依赖性。
5、连接数据库中的表:大多数情况下,两个表之间的连接是通过一个公共字段建立的。公共字段是两个表中都存在的一个字段。许多情况下,公共字段是其中一个表的主键。外键一般出现在“多”端。
6、关系数据库中不能存在多对多关系。用来消除多对多关系的最常用方法是通过添加桥接表来创建两个一对多关系。
?
2.数据库设计
常用方法:
(1)基于3NF的数据库设计方法:
在需求分析的基础上,识别并确认数据库模式中的全部属性和属性间的依赖,将他们组织成一个单一的关系模式,然后再分析模式中不符合3NF的约束条件,用投影和连接的办法将其分解,使其达到3NF。
(2)LRA方法:逻辑记录存取法。
(3)基于实体联系(E-R)的数据库设计方法。
(4)基于视图概念的数据库设计方法。
(5)面向对象的关系数据库设计方法。
通常将数据库设计分为需求分析、概念结构设计、逻辑结构设计和数据库物理设计4个阶段。
?
概念结构设计常用的方法是实体分析法、属性综合法。
二元联系的类型与定义:二元联系指两个实体之间的联系。分为一对一、一对多、多对多3种。
(1)一对一联系:对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系。
(2)一对多联系:对于实体集A中的每一个实体,实体集B有n个实体(n>=0)与之联系,反之对于实体集B中的每一个实体,实体集A至多只有一个实体与之联系。则实体集A与实体集B有一对多关系,记为1:n。
(3)多对多联系:若对于实体集A中的每一个实体,实体集B有n个实体(n>=0)与之联系。反过来,对于实体集B中的每一个实体,实体集A有m个实体(m>=0)与之联系。则实体集A与实体集B具有多对多联系,记为m:n。
消除冗余联系:若出现两个或两个以上的联系表示的是同一概念,则存在着冗余的联系,具有冗余联系的E-R模型转换为关系模型可能会得到非规范化的关系,因此必须予以消除。
?
警惕连接陷阱:
连接陷阱是一种存在语义缺陷的联系结构,分为扇形陷阱、断层陷阱、深层扇形陷阱3种信息。
扇形陷阱:指由一个实体引出的两种不同类型的扇形联系,形成双扇形结构。
3.数据库物理设计:
利用已确定的逻辑结构及DBMS提供的方法、技术。已较优的存储结构、数据存储路径、合理的数据存储位置及存储分配,设计一个高效可实现的物理数据库结构。
?
三、模式
数据库三级模式结构:这是数据库管理系统内部的系统结构。
1、概念模式:
只涉及行的描述,不涉及具体的值。概念模式的一个具体值称为模式的一个实例,同一模式可以有很多实例。概念模式反映的是数据库的结构及其联系,所以是相对稳定的。而实例反映的是数据库某一时刻的状态,所以是相对变动的。
概念模式不仅要描述记录类型,还要描述记录间的联系、操作、数据的完整性、安全性。但概念模式不涉及存储结构、访问技术等细节。
(注:可理解为系统表部分)
2、外模式:
也称用户模式或子模式。是用户与数据库系统的接口,是用户用到的那部分记录的描述。由若干外部记录组成,用户使用DML(数据操作语言)操作外模式的外部记录。
(注:可理解为用户表部分)
3、内模式:
也称存储模式,是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。定义所有内部记录的类型、索引、文件的组织方式。记录的存储方式是顺序存储、B树存储、Hash方法存储等。
?
两级映像:模式/内模式映像、外模式/模式映像。
?
实体与记录:实体表示客观存在,能区别的事物。记录是字段的有序集合,一般一条记录描述一个实体。
属性与字段:属性描述实体某方面的特性,字段标记实体属性的命名单位。
码与记录码:码是唯一能区分实体的属性或属性集,记录码是唯一标识文件中的每条记录的字段或字段集。
实体集与文件:实体集是具有共同特性的实体的集合。文件是同一类记录的汇集。
实体型与记录型:实体型是属性的集合,记录型是记录的结构定义。
?
数据模型三要素:
数据库结构的基础是数据模型,是用来描述数据的一组概念和定义。
数据模型三要素是数据结构、数据操作、数据的约束条件。
?
E-R模型:是实体-联系模型的简称。所采用的3个主要概念是实体、联系、属性。
实体:现实世界中可以区别其它对象的物体或事件。
联系:实体的联系分为实体内部的联系和实体与实体之间的联系。
?
两个不同实体之间的联系:
(1)一对一:指实体集E1中的一个实体最多只与实体集E2中的一个实体相联系。(1:1)
(2)一对多:表示实体集E1中的一个实体可与实体集E2中的多个实体相联系。(1:N)
(3)多对多:表示实体集中E1中的多个实体可与实体集E2中的多个实体相联系。(M:N)
?
两个以上不同实体集的联系:
两个以上不同实体集之间存在1:1:1、1:1:N、1:M:N和R:M:N
?
同一实体集内的二元联系:
同一实体集内的各实体之间也存在1:1、1:N和M:N的联系。
?
属性是实体某方面的特性。
?
派生属性可以从其它属性得来,例如:参加工作时间和工作年限,工作年限可以从当前时间和参加工作时间得到,这里工作年限就是一个派生属性。
?
概念模型中最常用的方法是实体-联系法,简称E-R方法。
?
扩充的E-R模型:
弱实体:这种实体对另一些实体有着很强的依赖关系,即一个实体的存在必须以另一个实体为前提。例如职工与家属的关系。
特殊化:一个实体集可以按照某种特征区分为几个子实体。例如:学生实体集可以分为研究生、本科生、大专生。我们称这种过程为特殊化,反之叫普遍化。
?
层次模型:采用树形结构表示数据与数据之间的联系。
网状模型:采用网状结构表示数据与数据之间的联系。
?
关系模型:在关系模型中以表格结构表达实体集,以及实体集之间的联系。
?
关系代数:
笛卡尔积:D1={0,1}、D2={a,b}。D1*D2={0,a}{0,b}{1,a}{1,b}。
?
关系的3种类型:
基本关系:实际存在的表,是实际存储数据的逻辑表示。
查询表:查询结果对应的表。
视图表:由基本表或其它视图表导出的表,由于它本身不独立存储在数据库中。数据库只存放它的定义,所以常称为虚表。
?
完整性约束:
完整性规则提供了一种手段来保证授权用户对数据库操作修改时不会破坏数据的一致性。
?
关系的完整性分为3类:
(1)实体完整性:规定基本关系R的主属性A不能取空值。
(2)参照完整性:在关系模型中实体与实体间的联系是用关系来描述的。这样自然就存在着关系与关系间的引用。
(3)用户定义完整性:反映某一具体应用所涉及的数据必须满足的语义要求,由应用环境决定。
5种基本的关系代数运算:并、差、广义笛卡尔积、投影、选择。
扩展关系运算:交、连接、除、广义投影、外连接。
列举关系运算的例子。
?
SQL支持三级模式结构:视图对应外模式,基本表对应模式,存储文件对应内模式。
?
索引:
数据库中索引与书籍中索引类似,利用索引可以快速查找整本书信息,无需阅读整本书。
数据库索引可以使数据库程序无需对整个表进行扫描,就可以在其中找到所需数据。
?
索引分为:
聚集索引和非聚集索引。
聚集索引是指索引表中索引项的顺序与表中记录的物理顺序一致的索引。
?
视图创建遵循如下规定:
(1)子查询不允许有order by和distinct语句。
(2)with check option表示对update、insert、delete操作时保证更新、插入或删除的行满足视图定义的谓词条件(即满足子查询中的where后的条件表达式)。
(3)组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含视图由SELECT子查询目标列的主属性组成。
?
SQL的访问控制:数据库控制是控制用户的存储权限,由DBA来决定。
通过GRANT和REVORK将授权通知系统,并存入数据字典。
四、规范化
规范化:将关系模式从低一级范式转化成高一级范式的过程。
5NF包含于4NF包含于BCNF包含于3NF包含于2NF包含于1NF。
?
1NF定义:关系模式R中的每个分量是不可再分的数据项,则关系模式R属于第一范式。1NF冗余度大、引起修改的不一致性、插入及删除异常。
2NF定义:若关系模式属于1NF,且每个非主属性完全依赖于码,则关系模式属于2NF。即1NF消除了非主属性对码的部分函数依赖。
3NF定义:2NF消除了非主属性对码的传递函数依赖,则称3NF。3NF的模式必是2NF的模式。产生冗余和异常的两个重要原因是部分函数依赖和传递依赖。
BCNF(巴科斯范式):即3NF消除了主属性对码的部分和传递依赖,称为BCNF。
4NF:4NF是限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖。
如果只考虑函数依赖,BCNF是关系模式最高的规范化程度。如果考虑多值依赖,4NF是关系模式最高的规范化程度。
?
五、事务管理
事务有4个特性ACID。
原子性(A):要么全做,要么全不做。
一致性(C):一个事务独立执行的结果,将保持数据的一致性,即数据不会因为数据的执行而遭受破坏。
隔离性(I):一个事务的执行不能被其它事物干扰。
持久性(D):一个事物一旦提交,对数据库的改变必须是永久的。
SQL中事物定义语句有3条:
BEGIN TRANSACTION:事务开始。
COMMIT:事务提交。
ROLLBACK:事务回滚。
?
Mysql学习总结(16)——Mysql之数据库设计规范的更多相关文章
- golang学习笔记16 beego orm 数据库操作
golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...
- MySQL学习笔记(一)——数据库基础
自己上大学时也学习过数据库,做开发时也用到过,但是做界面开发对于数据库的使用相对来说是比较简单的,大学时系统学习的数据库也还给老师了,在测试工作中也只是用到了一些基础sql,增删改查这一类的,但是自己 ...
- mysql学习3:mysql之my.cnf详解
mysql之my.cnf详解 本文转自:https://www.cnblogs.com/panwenbin-logs/p/8360703.html 以下是 my.cnf 配置文件参数解释: #*** ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL GROUP BY 语句
GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT column_name, funct ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 安装
所有平台的 MySQL 下载地址为: MySQL 下载:https://dev.mysql.com/downloads/mysql/ 注意:安装过程我们需要通过开启管理员权限来安装,否则会由于权限不足 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 运算符
要介绍 MySQL 的运算符及运算符的优先级. MySQL 主要有以下几种运算符: 算术运算符 比较运算符 逻辑运算符 位运算符 算术运算符 MySQL 支持的算术运算符包括: 在除法运算和模运算中, ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 导入数据
1.mysql 命令导入 使用 mysql 命令导入语法格式为: mysql -u用户名 -p密码 < 要导入的数据库数据(runoob.sql) 实例: # mysql -uroot -p12 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 处理重复数据
有些 MySQL 数据表中可能存在重复的记录,有些情况允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 防止表中出现重复数据 可以在 MySQL 数据表中设置指定的字段为 PRIMARY K ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 元数据
你可能想知道MySQL以下三种信息: 查询结果信息: SELECT, UPDATE 或 DELETE语句影响的记录数. 数据库和数据表的信息: 包含了数据库及数据表的结构信息. MySQL服务器信息: ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 临时表
MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间. MySQL临时表只在当前连接可见,如果使用PHP脚本来创建My ...
随机推荐
- 百度API调用实例
今天依据需求要从百度API中取出一些数据.这些操作包含:将坐标转换成百度坐标.依据转换的百度坐标进行特定的查询. 有需求的收藏下,免得下次手写浪费时间. 涉及到的操作有:JSON格式的字符解析.HTT ...
- IIS集成和经典配置
检測到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为[经典]模式). 我们将ASP.NET程序从IIS6移植到IIS7,可能执行提示下面错误: HTTP 错误 500. ...
- HDU 1730 Northcott Game
简单的尼姆博弈.想到了非常easy! 就拿一行举例.怎么赢.? 就是死劲挨着对方移,当然假设本身就是挨着的,又轮到你移动了,那么对于这一行来讲.你就是输的!! 由此可见每一行的棋子起始距离就显得尤为重 ...
- HDU 5358 First One 数学+尺取法
多校的题,摆明了数学题,但是没想出来,蠢爆了,之前算了半天的s[i][j]的和,其实是积.其实比赛的时候我连log(s[i][j])+1是s[i][j]的位数都没看出来,说出来都丢人. 知道了这个之后 ...
- 关于Hive在主节点上与不在主节点上搭建的区别之谈
Hive不在主节点上搭建,我这里是在HadoopSlave1上.
- java中replaceAll反斜杠\ or java中replaceAll 括号[
java中replaceAll反斜杠\ String s=new String("this is a \\"); s.replaceAll("\\",&qu ...
- Jesse's Code
题目描述 Jesse是个数学迷,他最喜欢研究“哥德巴赫猜想”,因此他的计算机密码也都采用素数. 但一直用同一个密码是不安全的,所以他要经常更换他的密码.但他只允许自己的密码中出现某些数字,且密码的每一 ...
- 【Django】Cookie
目录 Cookie介绍 操作Cookie 获取Cookie 设置 Cookie 删除Cookie @ Cookie介绍 Cookie的由来 大家都知道==HTTP协议是无状态的==. ==无状态的的意 ...
- MOOC使用心得
1. Mooctest 使用心得 慕测平台是编程类考试和练习的服务平台,教师可以轻松监管考试流程,学生可以自由练习编程.系统负责编程练习的自动化评估及可视化展现,配合当下红火的MOOC慕课课程,慕测平 ...
- react基础用法二(组件渲染)
react基础用法二(组件渲染) 如图所示组件可以是函数 格式:function 方法名(){ return <标签>内容</标签>} 渲染格式: <方法名 /> ...