一、基础概念

  • 元组 : 元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。
  • :码就是能唯一标识实体的属性,对应表中的列。
  • 候选码 : 若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何、子集都不能再标识,则称该属性组为候选码。例如:在学生实体中,“学号”是能唯一的区分学生实体的,同时又假设“姓名”、“班级”的属性组合足以区分学生实体,那么{学号}和{姓名,班级}都是候选码。
  • 主码 : 主码也叫主键。主码是从候选码中选出来的。 一个实体集中只能有一个主码,但可以有多个候选码。
  • 外码 : 外码也叫外键。如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。
  • 主属性 : 候选码中出现过的属性称为主属性。比如关系 工人(工号,身份证号,姓名,性别,部门). 显然工号和身份证号都能够唯一标示这个关系,所以都是候选码。工号、身份证号这两个属性就是主属性。如果主码是一个属性组,那么属性组中的属性都是主属性。
  • 非主属性: 不包含在任何一个候选码中的属性称为非主属性。比如在关系——学生(学号,姓名,年龄,性别,班级)中,主码是“学号”,那么其他的“姓名”、“年龄”、“性别”、“班级”就都可以称为非主属性。

二、为什么不推荐使用外键与级联?

  对于外键和级联,阿里巴巴开发手册这样说到:

【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

说明: 以学生和成绩的关系为例,学生表中的 student_id 是主键,那么成绩表中的 student_id 则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群; 级联更新是强阻塞,存在数据库更新风暴的风 险; 外键影响数据库的插入速度

  平时开发的同学可以明显感觉到,每次做DELETE 或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦, 测试数据极为不方便;。

  另外,外键的主从关系是定的,假如那天需求有变化,数据库中的这个字段根本不需要和其他表有关联的话就会增加很多麻烦。

三、ER图

  E-R 图 也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

四、依赖

  • 函数依赖(functional dependency) :若在一张表中,在属性(或属性组)X 的值确定的情况下,必定能确定属性 Y 的值,那么就可以说 Y 函数依赖于 X,写作 X → Y。
  • 部分函数依赖(partial functional dependency) :如果 X→Y,并且存在 X 的一个真子集 X0,使得 X0→Y,则称 Y 对 X 部分函数依赖。比如学生基本信息表 R 中(学号,身份证号,姓名)当然学号属性取值是唯一的,在 R 关系中,(学号,身份证号)->(姓名),(学号)->(姓名),(身份证号)->(姓名);所以姓名部分函数依赖与(学号,身份证号);
  • 完全函数依赖(Full functional dependency) :在一个关系中,若某个非主属性数据项依赖于全部关键字称之为完全函数依赖。比如学生基本信息表 R(学号,班级,姓名)假设不同的班级学号有相同的,班级内学号不能相同,在 R 关系中,(学号,班级)->(姓名),但是(学号)->(姓名)不成立,(班级)->(姓名)不成立,所以姓名完全函数依赖与(学号,班级);
  • 传递函数依赖 : 在关系模式 R(U)中,设 X,Y,Z 是 U 的不同的属性子集,如果 X 确定 Y、Y 确定 Z,且有 X 不包含 Y,Y 不确定 X,(X∪Y)∩Z=空集合,则称 Z 传递函数依赖(transitive functional dependency) 于 X。传递函数依赖会导致数据冗余和异常。传递函数依赖的 Y 和 Z 子集往往同属于某一个事物,因此可将其合并放到一个表中。比如在关系 R(学号 , 姓名, 系名,系主任)中,学号 → 系名,系名 → 系主任,所以存在非主属性系主任对于学号的传递函数依赖。。

五、数据库范式

5.1 1NF(第一范式)

  属性(对应于表中的字段)不能再被分割,也就是这个字段只能是一个值,不能再分为多个其他的字段了。1NF 是所有关系型数据库的最基本要求 ,也就是说关系型数据库中创建的表一定满足第一范式。

5.2 2NF(第二范式)

  2NF 在 1NF 的基础之上,消除了非主属性对于码的部分函数依赖。

  比如,学生选课表,student_id与course_id构成主键,能唯一标识选课关系,如果这个表再增加course_name字段,则破坏了第二范式,因为course_name依赖于course_id,应该将course_id和course_name单独组成course表。

5.3 3NF(第三范式)

  3NF 在 2NF 的基础之上,消除了非主属性对于码的传递函数依赖 。

  比如在关系 R(学号 , 姓名, 系名,系主任)中,学号 → 系名,系名 → 系主任,所以存在非主属性系主任对于学号的传递函数依赖,所以该表的设计,不符合 3NF 的要求。

MySQL-学习数据库必备的基础知识相关推荐

  1. MySQL学习笔记-第一篇-基础知识与命令

    目录 1 登录命令 1.1 主机域名登录 1.2 主机ip登录 2 库命令 2.1 显示库 2.2 创建数据库 2.3 删除数据库 2.4 MySQL-8.新特性 3 表命令 3.1 创建数据表 3. ...

  2. union连接攻击MySQL函数_sql注入之必备的基础知识

    什么是sql注入(sql injection) 所谓sql注入式攻击,就是攻击者把sql命令插入到web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的sql命令.在某些表单中,用户输入的内容 ...

  3. 学php设计需要什么基础知识,学习seo需要哪些基础知识

    学习seo需要的基础知识有:1.网页制作语言,如html.css.php等:2.cms系统,如wordpress.dedecms.discuz等:3.dreamweaver.photoshop. 1. ...

  4. 学习python需要什么基础-学习Python需要哪些基础知识?

    今天是腊月二十七,给各位朋友拜个早年! Python学习可以分为几个阶段,入门.进阶.应用. 先说说入门需要哪些基本的知识储备. Python因为易于学习的特点,入门很简单,掌握基本的Python知识 ...

  5. 学习hadoop需要具备基础知识

    学习hadoop需要具备基础知识 首先整体上了解Hadoop,包括hadoop是什么,能够做什么,使用场景等,不需要考虑细节问题.在有了整体上的了解后,就开始准备系统地学习hadoop.建议:勿一味学 ...

  6. 学python需要什么基础-学习Python需要哪些基础知识?

    今天是腊月二十七,给各位朋友拜个早年! Python学习可以分为几个阶段,入门.进阶.应用. 先说说入门需要哪些基本的知识储备. Python因为易于学习的特点,入门很简单,掌握基本的Python知识 ...

  7. 小猪的Python学习之旅 —— 1.基础知识储备

    小猪的Python学习之旅 -- 1.基础知识储备 引言: (文章比较长,建议看目录按需学习-) 以前刚学编程的时候就对Python略有耳闻,不过学校只有C,C++,Java,C#. 和PHP有句&q ...

  8. MySQL--新手必备SQL基础知识、事务ACID及隔离级别

    ❤️‍您好,我是贾斯汀,本文主要分享数据库的一些基础知识!❤️‍ SQL 什么是SQL? [百度百科] 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的 ...

  9. 学计算机设计制图需啥基础,学好室内设计制图必备的基础知识

    学好室内设计制图必备的基础知识 导语:学室内设计除了熟练掌握计算机辅助软件以外,更要加强自身的素质.我认为室内设计的最重要的两部分,首先是功能设计,下一步才是效果设计,因为我在做效果设计以前一直是做功 ...

最新文章

  1. ipython官网_IPython Notebook快速搭建
  2. Reddit如何使用Memcached来存储3TB的缓存数据--转
  3. 以后再也不去字节面试了…
  4. 跨越DDD从理论到工程落地的鸿沟
  5. jsp+java bean+mysql数据库进行分页显示
  6. 【Kafka】kafka zk下注册的信息 get /brokers/ids/1 “host“:null “port“:-1
  7. JAVA快速排序算法实现
  8. c++数据结构中 顺序队列的队首队尾_数据结构与算法—队列图文详解
  9. 2017《JAVA》预备作业 计科1501班 王奕开
  10. MySQL 批量插入,如何不插入重复数据?
  11. POJ - 1179
  12. 如何保障短网址的安全性?
  13. 数据结构名词解释详细总结
  14. 注册快手提示服务器繁忙,快手登录失败怎么回事
  15. 松原计算机等级考试试题,2019年上半年吉林省松原市计算机等级考试注意事项...
  16. 免费动态IP代理科普知识课堂—代理服务器的类型
  17. 一个公务员工作七年后的肺腑之言”——给想考公务员的XDJM们看看,或许能有帮助
  18. Visio保存为网页出错
  19. Python学者在CSDN该怎么学习
  20. 安装Windows 10X 教你如何安装Win10X正式版 及下载地址Win10X 20279.1002

热门文章

  1. FPGA国内外发展现状
  2. HDU 5473(There was a kingdom-凸包+dp)
  3. C# 总结ManualResetEvent与AutoResetEvent【一】
  4. SuperMap GIS BIM类型数据优化 QA
  5. 递归算法和过程的详解
  6. openstack创建云主机流程
  7. 关于ftp操作中被动模式(Passive Mode)是什么意思?
  8. NameError: name ‘d2l‘ is not defined
  9. 2021春深入理解计算机系统大作业——程序人生
  10. 安装zabbix及部署