在学习数据库的时候,我们首先要知道什么是数据库、数据库的分类都有什么、什么是DBMS、DBMS有什么、以及设计表时遵循的范式原则是什么(准确定义)、因此要了解什么是1NF/2NF/3NF、以及区分什么是超键、外键、候选键、和主键。
1.数据库?
1.1什么是数据库?
DB是database的缩写也就是数据库,数据库是存储数据的一个集合,也是一个仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的,我们可以通过数据提供的多种方法来管理数据库里的数据。
1.2数据库的分类?
-关系型;:mysql、oracle、db2、sql server、sysbase、informix
-非关系型:特点是面向对象和集合的
-Nosql:介于关系型和非关系型之间:MongoDB 、特点就是面向文档的
2、DBS
DBS是Database System的缩写也就是数据库系统,数据库系统又数据库和数据库管理软件等组成,数据库是一个逻辑上的存储数据的概念,而对应的是实体是数据库管理软件存储存储在硬盘上的数据库,所以数据系统包含数据库和数据库管理系统。
3.DBMS
DBMS是Database Management System的缩写,它是操作数据库和管理数据库的一个系统,比如mysql、sqlserver等都是属于数据库管理软件,人们通过这些系统或者工具来管理数据库内的数据。
4.范式
4.1 1NF
第一范式:就是我们的属性列要具有原子性,不可以在分割。
------怎么理解不可在分割?就是我们这个列的值(包含的信息)可以明确的确定该列。
------定义:如果关系R中的所有属性的值域都是单纯域,那么关系模式R是第一范式的。
例1: 姓名 性别 地址
小明 男 中国黑龙江省哈尔滨市江北区
这里就是一个关系行数据库,因为地址这个信息看似可以分为国家,省,市,但是放在一起可以明确的确定地址这个列,所以不算可再分。
例2: tel中分为手机和座机,就相当于套了一个子表,所以不符合1NF。
-----而且我们的关系型数据库必须满足第一范式。
4.2 2NF
第二范式:符合1NF,并且非主属性完全依赖于码(主键)。
-------表中的记录唯一。通常设定一个主键来实现(该键不包含业务逻辑,而且一般为自增长)
------完全依赖就是指不能存在对主键的部分属性的依赖。如果主键有2个列的时候,那么如果某一列的一个属性只依赖一个候选码就不满足2NF;
4.3 3NF
第三范式:符合2NF任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖;表中没有冗余数据
-------什么是冗余数据:表的信息中,没有数据是被推导出来的。如果数据是可以被推倒出来的,那么不可以被单独设计成一个字段 存放。
简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。
下面列举一个存在冗余的例子:
如果我们就建一个stu表的话,那么classname 和 depart就是冗余数据。他完全可以建立建立两个表格,stu表和class表。
-------但是不是说没有冗余数据效率就会很高,很多时候我们需要根据情况让他冗余,来提高查询效率。而这种情况多数发生在1对n的,1那个部分上面。
比如下面的例子:题目是我们有一个相册,每个相册中包含很多的相片。当我们每次点开一个相册的时候,会出现一个图片,并且相册和每个图片都有浏览次数。而每个相册的浏览次数往往可以通过其中包含的相片的浏览次数相加得到。那么album相册表中的views就是一个冗余数据。如果我们不在album中设置views列,而是通过每次计算得到,查询效率会非常低,所以往往我们不遵守3NF,而在album中设置views列。
5.区分下超键、候选键、主键、
参考:https://blog.csdn.net/fjxcsdn/article/details/76549751
课本上给各种键的定义如下:(所有的键都是一个集合,这个集合可以包括一个集,也可以是多个集)
超键(super key):在关系中能惟一标识元素属性的集称为关系模式的超键。
候选键:(Candidate Key):不含有多余属性的超键称为候选键。也就是说在候选键中在删除属性,就不是键了。
主键(Primary Key):用户选作元组标识的候选键为主键。一般不佳说明,键就是主键。候选中挑一个为主键。
外键(Froeign Key):如果模式R中的属性k是其他模式的主键,那么k在模式R中称为外键。
课本上的定义过于笼统,下面我用一张学生成绩信息表给大家详细的说一下:
学生成绩信息表中有(学号、姓名、性别、年龄、系别、专业等)
超键:
学生表中含有学号或者身份证号的任意组合都为此表的超键。如:(学号)、(学号,姓名)、(学号,性别)等
我们假设学生的姓名唯一,没有重名的现象。
学号唯一,所以是一个超键
姓名唯一,所以是一个超键
(姓名,性别)唯一,所以是一个超键
(姓名,年龄)唯一,所以是一个超键
(姓名,性别,年龄)唯一,所以是一个超键
候选键:
学号唯一,而且没有多余属性,所以是一个候选键
姓名唯一,而且没有多余属性,所以是一个候选键
(姓名,性别)唯一,但是单独姓名一个属性就能确定这个人是谁,所以性别这个属性就是多余属性,所以(姓名,性别)不是候选键
(姓名,年龄),(姓名,性别,年龄)同上,也不是候选键
主键:
主键就是候选键里面的一个,是人为规定的,例如学生表中,我们通常会让“学号”做主键,学号能唯一标识这一个元组。
当然后面还有5NF,6NF.但是一把数据库就是设计到3NF就可以了。