软件设计师备考笔记【day3】-数据库

一,数据库模型

1,三级模式两级映像

(1)三级模式

概念模式:数据库整体逻辑结构,唯一、全局,描述整张数据库所有实体、关系、属性;

内模式:数据库**物理存储结构,**描述数据在硬盘上的存储方式、索引、文件结构,最底层,面向硬件存储

外模式:面向普通用户 / 应用程序的局部视图

(2)两级映像

模式/内模式映像:保证物理独立性

外模式/模式映像:保证逻辑独立性

2,E-R 模型

实体:用矩形表示,每个实体由一组属性来表示。

联系:用菱形表示,一对一(1:1)、一对多(1:n)、多对多(m:n)。3)

属性:用椭圆表示,是实体某方面的特性

3,数据库设计

概念结构设计:E-R 模型,业务实体与联系

逻辑结构设计:关系模式、数据表、范式、主外键

物理结构设计:存储结构、索引、物理存取方案

二,数据库操作

1,关系模型的完整性规则

(1) 实体完整性:主码(主键)的主属性不能为空、不能重复

(2)参照完整性:外键的值必须存在

(3)用户定义完整性:满足用户要求

2,关系五大基本运算

选择 σ:选

投影 π:选

笛卡尔积:两张表全组合

连接:条件匹配拼接除运算:用于包含查询

三,SQL语句

  1. DDL 数据定义:create、alter、drop (库、表、索引、视图)

  2. DML 数据操作:insert、update、delete

  3. DQL数据查询:select

  4. DCL 数据控制:grant 授权、revoke 回收权限

  5. 视图

  6. 索引

四,数据库范式

1,依赖的分类
(1)部分函数依赖

主键为复合主键时,非主属性仅依赖主键其中一部分,不依赖完整主键(只要主键里的某一小部分,就能单独决定 Y,不需要整个主键。)

案列:

主键:(学号,课程号)

学生姓名 → 只靠【学号】就能确定,不需要课程号

姓名部分依赖于 (学号,课程号)

(2)完全函数依赖

非主属性必须依赖完整复合主键 ,缺少任意一个主键字段无法确定(必须整个主键一起,才能决定 Y,少一个都不行)

案列:

主键:(学号,课程号)

成绩 依赖于 (学号 + 课程号)

  • 只知道学号 → 查不出某一门课成绩
  • 只知道课程号 → 不知道是谁的成绩
  • 成绩 完全依赖于 (学号,课程号)
(3)直接依赖

A -> B (A是主键,B直接由A决定)

(4)传递依赖

A -> B -> C (A是主键,B依赖于A,而C又依赖于B,导致C间接依赖于A)

2,范式基本概念

候选码 :是一个或多个属性的集合,它能够唯一地、最小地 标识表中的每一行数据。

主属性:出现在候选码里的字段,一个表就一个主码

非主属性:不在候选码里的字段

特性 候选码 主码
数量 一个表可以有多个 一个表只能有一个
来源 根据数据本身的特性确定 从候选码中人为选定
作用 所有能唯一标识记录的"备选人" 被选中的、用于实际操作的"负责人"
关系 主码的"候选池" 候选码的"最终代表"

假设有一个 学生 表,包含以下字段:学号身份证号姓名手机号

  • 学号:可以唯一确定一个学生,且没有多余属性,所以它是一个候选码。
  • 身份证号:同样可以唯一确定一个学生,它也是一个候选码。
  • 手机号:如果规定每个学生的手机号也必须唯一,那么它也是一个候选码。
  • (姓名, 手机号):虽然这个组合也能唯一确定一个学生,但它不是 候选码。因为单独的 手机号 已经足够了,姓名 在这里是多余的,不满足"最小性"。

我们有 学号身份证号手机号 三个候选码 。设计者通常会选择 学号 作为主码,因为它简短、稳定且是业务上的自然标识

3,判定候选码

类型 特征 说明
L 类 只出现在依赖箭头左边(→的左边),从未出现在右边 这类属性,一定是候选码的一部分
R 类 只出现在依赖箭头右边(→的右边),从未出现在左边 这类属性,一定不是候选码的一部分
N 类 既不在左边,也不在右边 这类属性,一定是候选码的一部分
LR 类 既在左边,也在右边 可能是候选码的一部分,需要验证
4,范式

(1)1NF:列(字段)具有原子性所有字段不可再拆分,不能一列存多个数据。

(2)2NF:每一个非主属性完全依赖 于任何一个候选码,不能存在部分函数依赖

(3)3NF:所有非主属性既无部分依赖,也无传递依赖 于候选码。(普通字段,只能直接依赖主键

五,事务和并发控制

1,事务的四大特性
  • 原子性:要么全执行,要么全回滚
  • 一致性:事务前后数据完整一致
  • 隔离性:事务之间互不干扰D
  • 持久性:提交后数据永久保存

2,事务并发三大问题

  • **脏读:**一个事务读取了另一个事务尚未提交的修改数据。
  • 不可重复读:同一事务内,多次读取同一数据,结果不一致
  • 幻读:在同一个事务内,两次执行相同的范围查询,返回的记录行数不一致。
3,封锁机制
  • 共享锁 S:读共享、写排斥
  • 排他锁 X:读写都排斥
相关推荐
Bert.Cai1 小时前
MySQL FLOOR()函数详解
数据库·mysql
Ting.~1 小时前
软件设计师备考笔记【day3】-操作系统
笔记
小碗羊肉1 小时前
【MySQL | 第七篇】索引
数据库·mysql
handler011 小时前
进程状态流转的本质:Linux 内核队列与底层数据结构解密
linux·运维·c语言·数据结构·c++·笔记·学习
m0_495496411 小时前
SQL中如何获取前N个最大值并排除自己_利用窗口函数限制
jvm·数据库·python
m0_740653221 小时前
mysql如何提取日期中的年份_使用year函数从日期中截取
jvm·数据库·python
hanyi_qwe1 小时前
Mysql 与 Nginx 双机高可用
数据库·mysql·nginx
S1998_1997111609•X1 小时前
login:/-system.web,dex.dmp,b-scode:app·%
网络·数据库·百度·facebook·twitter
运气好好的1 小时前
mysql数据库日志文件过大如何清理_定期备份与重置日志文件
jvm·数据库·python