什么是数据库,数据库管理系统,数据库系统,数据库管理员?
- 数据库:数据库(DataBase 简称DB)就是信息的集合或者说数据库是由数据库管理系统管理的数组的集合。
- 数据库管理系统:数据库管理系统(Database Management System 简称 DBMS)是一种早从和管理数据库的大型软件,通常用于建立,使用和维护数据库。
- 数据库系统:数据库系统(Data Base System,简称 DBS)通常由软件,数据库和数据库管理员组成。
-
数据库管理员:数据库管理员(Database Administrator, 简称 DBA)负责全面管理和控制数据库系统。
数据库系统基本构成
什么是元组,码,候选码,主码,外码,主属性,非主属性?
- 元组:是关系数据库中的基本概念,关系是一张表。表中的每行就是一个元组,每列就是一个属性。在二维表里,元组也称为行。
- 码:嘛就是唯一标识实体的属性,对应表中的列。
- 候选码:若关系中的某一属性或者属性组的值能唯一的标识一个元组,而其任何子集都不能再标识,则称该属性组为候选码。
- 主码:主码也叫主键。主码是从候选码中选出来的。一个实体可以有多个候选码,但是只能有一个主码。
- 外码:也叫外键。如果一个关系中的一个属性是另外一个关系中的主码,则这个属性为外码。
- 主属性:候选码中出现过的属性称为主属性。
- 非主属性:不包含在任何一个候选码中的属性称为非主属性。
主键和外键有什么区别?
- 主键:用于唯一标识一个元组。不能有重复,不允许为空。一个表只能有一个主键。
- 外键:外键用来和其他表建立联系用,外键是另一表的主键,外键是可以有重复的。可是是空值,可以有多个。
为什么不推荐使用外键与级联?
阿里巴巴开发手册这样说:[强制]不得使用外键与级联,一切外键概念必须在应用层解决。
其实不推荐使用外键的原因主要有几点:
- 增加了复杂性
- 增加了额外工作
- 对分库分表不友好(分库分表下外键无法生效)
其实总结起来就是对数据库的压力会加大。尤其是分库分表的情况下是无法使用的,而且级联更新是强阻塞,存在数据库更新风暴的风险,外键影响数据库的插入速度。相对而言我们把压力放在代码层会更好。
什么是ER图?
ER图也成为实体-联系图。提供了表示实体类型,属性和联系的方法。用来描述现实世界的概念模型。
在ER图中有如下四个成分:
- 矩形框:表示实体,在框中记入实体名。
- 菱形框:表示联系,在框中记入联系名。
- 椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。
- 连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。
下面是一个学生选课的ER图:
image.png
对应的数据库实际的关系模型如下:
image.png
这个其实我认为很容易学,而且作用是为了让自己逻辑清晰。感兴趣的可以自己去查下画法。
数据库范式
1NF(第一范式):
属性不能再被分割,也就是说这个字段只能是一个值,不能再被分为多个其他的字段了。INF是所有关系型数据库的最基本要求,也就是说关系型数据库中创建的表一定要满足第一范式。
2NF(第二范式):
所有非主键字段,必须我完全依赖主键,不能只依赖主键的一部分。
从第一范式到第二范式的实现
3NF(第三范式):
在第2nf的基础上,每列都和主键直接相关而不是间接相关。
简单来说就是比如有一个订单表,其中肯定需要一些买家信息也需要一写卖家信息。对于卖家信息和卖家信息来说依赖的不是订单本身,而是依赖订单中卖家和买家。所以就不应该把买家资料和卖家资料放到订单表中。
什么是存储过程?
这个阿里巴巴开发手册上也明文规定了:【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。
但是我们还是要简单了解下:我们可以把存储过程看成是一些sql语句的集合。中间加了点逻辑控制语句。存储过程在业务比较复杂的时候是非常实用的。比如很多时候我们完成一个操作可能需要写一大串sql,这时候我们就可以写一个存储过程,这样也方便了我们下一次的调用。存储过程一旦调试完通过后就能稳定运行。另外,使用存储过程比单纯sql至于执行要快,因为存储过程是预编译过的。
drop,delete与trancate区别?
- drop:直接将表删除掉。在删除表的时候使用
- truncate:清空数据。truncate tableName.只清空表中数据,再插入的时候自增id从1开始。
- delete:删除数据,delete from tableName where ~.删除指定条件的数据。
数据库设计通常分为哪几步?
- 需求分析:分析用户的需求,包括数据,功能和性能需求。
- 概念结构设计:主要采用E-R模型进行设计,包括ER图
- 逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模型的转换。
- 物理结构设计:主要是为所设计的数据库选择合适的存储结构和存取路径。
- 数据库实施:包括编程,测试和试运行。
- 数据库的运行和维护:系统的运行和数据库的日常维护。