数据库基础

1. 数据库、数据库管理系统、数据库系统、数据库管理员

  • 数据库:DataBase,DB,就是信息的集合,或者说数据库是由数据库管理系统管理的数据的集合。
  • 数据库管理系统:DataBase Management System,DMS,是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。
  • 数据库系统:Data Base System,DBS,由软件、数据库和数据库管理员组成。
  • 数据库管理员:DataBase Administrator,负责全面管理和控制数据库系统。

2. 元组、码、候选码、主码、外码、主属性、非主属性

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

3. ER图

Entity Relationship Diagram,实体联系图,提供了表示实体类型、属性和联系的方法。

ER图由3个要素组成:

  • 实体:通常是现实世界的业务对象,当然使用一些逻辑对象也可以。比如对于一个校园管理系统,会涉及学生、教师、课程、班级等等实体。在ER图中,实体使用矩形框表示。
  • 属性:即某个实体拥有的属性,属性用来描述组成实体的要素,对于产品设计来说可以理解为字段。在ER图中,属性使用椭圆形表示。
  • 联系:即实体与实体之间的关系,在ER图中用菱形来表示,这个关系不仅有业务联系关系,还能通过数字表示实体之间的数量对照关系。例如,一个班级会有多个学生就是一种实体间的联系。

下图是一个学生选课的 ER 图,每个学生可以选若干门课程,同一门课程也可以被若干人选择,所以它们之间的关系是多对多(M: N)。另外,还有其他两种实体之间的关系是:1 对 1(1:1)、1 对多(1: N)。
在这里插入图片描述

4. 数据库范式

数据库设计范式:数据库表的设计依据。

  1. 第一范式:要求任何一张表必须有主键,每一个字段原子性不可再分。

  2. 第二范式:建立在第一范式的基础之上,要求所有非主键字段完全依赖主键,不要产生部分依赖

  3. 第三范式:建立在第二范式的基础之上,要求所有非主键字段直接依赖主键,不要产生传递依赖

按照以上范式设计数据库表,可以避免表中数据的冗余,空间的浪费。

第一范式

最核心,最重要的范式,所有表的设计都需要满足。
必须有主键,并且每一个字段都是原子性不可再分。

学生编号 	学生姓名 		联系方式
------------------------------------------
1001		张三		zs@gmail.com,1359999999
1002		李四		ls@gmail.com,13699999999
1001		王五		ww@163.net,13488888888

上表不满足第一范式

原因:第一,没有主键;第二,联系方式可以分为邮箱地址和电话:

学生编号(pk)		 学生姓名		邮箱地址		 联系电话
---------------------------------------------------------
1001				张三		 zs@gmail.com	 1359999999
1002				李四		 ls@gmail.com	 13699999999
1003				王五		 ww@163.net		 13488888888

第二范式

建立在第一范式的基础之上,要求所有非主键字段必须完全依赖主键,不要产生部分依赖

学生编号	学生姓名   教师编号  教师姓名
----------------------------------------------------
1001		张三		001		王老师
1002		李四		002		赵老师
1003		王五		001		王老师
1001		张三		002		赵老师

多对多关系!(1个学生可能有多个老师,1个老师有多个学生)

上表满足第一范式;修改

学生编号 教师编号,两个字段联合做主键,复合主键(PK: 学生编号+教师编号)

学生编号+教师编号(pk)		学生姓名  		教师姓名
----------------------------------------------------
1001		001			  张三			王老师
1002		002			  李四			赵老师
1003		001			  王五			王老师
1001		002			  张三			赵老师

上表不满足第二范式:张三”依赖1001,“王老师”依赖001,显然产生了部分依赖。

修改:使用三张表来表示多对多的关系

学生表

学生编号(pk)		学生名字
------------------------------------
  1001				张三
  1002				李四
  1003				王五
		

教师表

教师编号(pk)		 教师姓名
--------------------------------------
	001				王老师
	002				赵老师

学生教师关系表

id(pk)			学生编号(fk)			教师编号(fk)
------------------------------------------------------
1					1001					001
2					1002					002
3					1003					001
4					1001					002

总结:多对多设计,三张表,关系表两个外键!

第三范式

第三范式建立在第二范式的基础之上,要求所有非主键字典必须直接依赖主键,不要产生传递依赖。

学生编号(PK) 学生姓名 	  班级编号  	 班级名称
---------------------------------------------------------
 1001		  张三		01			一年一班
 1002		  李四		02			一年二班
 1003		  王五		03			一年三班
 1004		  赵六		03			一年三班

1对多关系!(一个教室中有多个学生)

满足第一范式,有主键(学生编号)。
满足第二范式,因为主键不是复合主键,没有产生部分依赖。主键是单一主键。

不满足第三范式:一年一班依赖01,01依赖1001,产生了传递依赖。

修改:

班级表:一

班级编号(pk)			班级名称
----------------------------------------
 01						一年一班
 02						一年二班
 03						一年三班

学生表:多

学生编号(PK) 	 学生姓名 		班级编号(fk)
-------------------------------------------
 1001				张三			01			
 1002				李四			02			
 1003				王五			03			
 1004				赵六			03		

总结: 一对多,两张表,多的表加外键!

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zdb呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值