数据库基础(1)关系型数据库

数据库基础(1)关系型数据库

概述

技术时间长不用就会生疏,最近有一个需求涉及到数据库相关的一些知识,才发现多表查询都忘记怎么写了,近期会陆续整理一下数据库相关的一些资料,权当是以后查起来方便点。

1 是什么

同样的,学习一个东西要先知道他是什么:

建立在关系模型上的数据库。常见的有:Oracle,MySql,SqlServer等目前市面上用的多的数据库基本都是关系型的

数据库中的“表”代表实体,每张表之间的主外键等联系是实体关系。

例如:

每一个学生有学号,性别,班级,地址,电话等资料,在数据库中就是用一张学生表来表示,这个表的字段就是学生的这些属性。这个学生就是一个实体。

每一个班级有辅导员,班长,学习委员等资料,在数据库中用一张班级表表示,班级就是一个实体。

一个学生一般来说只能有一个班级,一个班级可以有多名学生,因此学生和班级存在联系,这种联系就是实体之间的关系。

1.1 范式

概念:关系型数据库规范

作用:设计表,减少数据冗余

1)第一范式(1NF)

无重复的列

  • 同一列中不可有多个值;
  • 每一行只包含一个实例信息;

例如,学生表中没有重复的属性(列)名,每一行只存储一条学生信息。

2)第二范式(2NF)

非主属性完全依赖于一个主关键字

  • 在满足1NF的前提下;
  • 每个实例(每一行)可以被唯一区分,需要有主属性;
  • 每一个属性(列)必须完全依赖主属性;

例如,学生表,学号就是主属性,它可以唯一确定一个学生的姓名、班级

反例,选课表,存在学号,课程号,成绩,学分。这里,学号&课程号为组合关键字,学分(非主属性)仅靠课程号就能决定(部分依赖)

a.数据冗余,假设同一门课由40个学生选修,学分就 重复40次

b.更新异常,若调整了某课程的学分,相应的元组CREDIT值都要更新,有可能会出现同一门课学分不同。

c.插入异常,如计划开新课,由于没人选修,没有学号关键字,只能等有人选修才能把课程和学分存入。

d.删除异常,若学生已经结业,从当前数据库删除选修记录。某些门课程新生尚未选修,则此门课程及学分记录无法保存。

原因:学分(非主属性)仅靠课程号就能决定(部分依赖),而不是完全依赖

解决方法:分成两个表。选课表,学号,课程号,成绩。课程表,课程号,学分。

3)第三范式(3NF)

非主属性不存在传递依赖

  • 在满足2NF的前提下;
  • 不能包含在其他表中已经声明的非主关键字信息;

反例,学生表,存在学号,学生姓名,班级号,班级名称。这里,学号可以决定班级号,但是学号不能直接决定班级名称,需要通过班级号来确定班级名称(传递依赖)

因此,需要通过两张表来表示。即学生表,有学号,学习姓名,班级号。
班级表,有班级号,班级名称。学生表和班级表是一对多的关系。

一般来讲满足三范式即可,BCNF,RCNF 请自行了解。

1.2 关系映射

在关系型数据库中通常存在三种映射关系:

1) 一对一

通常用一张表就能表示关系

例如一名学生只有一个电话,一个电话对应一名学生;一个人只有一个身份证

2) 一对多

通常需要用两张表来表示关系

例如一名学生只有一个班级,一个班级可以对应多名学生;一个教室可以有多张椅子,一张椅子只属于一个教室

3) 多对多

通常需要三张表来表示关系

例如一名学生有多门课程,一门课程有多名学生选修;一本书可以有多个作者、一个作者可以有很多本书

小结

目地:规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新

原则:遵从概念单一化 “一事一地”原则,即一个关系模式描述一个实体或
实体间的一种联系。规范的实质就是概念的单一化。

方法:将关系模式投影分解成两个或两个以上的关系模式。

要求:分解后的关系模式集合应当与原关系模式”等价”,即经过自然联接可以恢复原关系而不丢失信息,并保持属性间合理的联系。

注意:一个关系模式可以分解为不同关系组合,并不唯一!一般来讲满足三范式即可,BCNF范式是为了多值依赖等规范出现的,但是乱用会破坏完整性。

1NF:一个table中的列是不可再分的(即列的原子性)

2NF:一个table中的行是可以唯一标示的,(即table中的行是不可以有重复的)

3NF:一个table中列不依赖以另一个table中的非主键的列

下一章介绍数据库的环境搭建。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值