diff --git "a/\347\254\224\350\256\260/05 \351\273\204\347\202\234\346\235\260.md" "b/\347\254\224\350\256\260/05 \351\273\204\347\202\234\346\235\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..9f5bf5d85a60f0f50e2e0fb42a47ced73feb3bc3 --- /dev/null +++ "b/\347\254\224\350\256\260/05 \351\273\204\347\202\234\346\235\260.md" @@ -0,0 +1,181 @@ +## 数据库 + +## 基本概念 + +### 数据Date + +*一切表示(有意义的)信息的文字或者符号* + +### 数据库管路系统DBMS + +*介于用户和操作系统之间的一个软件* + +### 数据库 + +- *存储数据的仓库就叫数据库* + +### 数据库系统 + +- *有数据库、数据管理系统的数据库管理员一起组成的用于数据的储存、管理、维护等的一整套系统* + +## 基本组成 + +**数据库** + +- **表**: *关系* +- **行**:*记录* +- **列**:*也叫属性,字段* + +## 数据库的分类 + +### 关系型数据库 + +- *SqlServer* +- *MySql* +- *MariaDb* +- *PostgreSQL*:世界上功能最强大的数据库 +- *Oracle*(甲骨文) +- *达梦* +- *金仓* +- *Sqllite*:桌面型数据库 + +### 非关系型数据库 + +- *MongoDb*:文档数据库,最像关系型数据库的非关系型数据库 +- *Redis*:键值对数据库,内存数据库,速度极快,多用于高并发,高缓存场景 +- *Hbase*:列储存型数据库,多用于大数据场景 + +## 结构化查询语言SQL + +### 基础语句 + +#### 查询 + +select*from xxx + +##### 查询子句 + +*平均值* avg、*最大值* max、*最小值 * min、*总和* sum、*计数* count、*类似于,像* like、前面几条记录 top、*位于什么区间* between...and...、*去重* distinct + +##### 投影查询 + +- *选择返回的数据集的字段和集合* +- select id.userName from xxxx where yyy=zzz + + +##### 多表查询 + +*一次查询多个表* + +select a.*.b. from a.b where a.id = b.id + +##### 连接查询 + +*通过join关键词从各表中获取信息* + +###### 内连接 + +##### **inner join** + +###### 外连接 + +##### **outer join** + +*left outer join* 、*right outer join* 、*full outer join* + +##### 子查询 + +*一个查询从另外一个或若干个查询中获取数据* + +select * from (select * from xxx) + +##### 合并查询 + +*union* 会去重、*union all* 不去重 + +##### **要求** + +合并的若干个集合字段数一直,并且每个字段的类型兼容 + +**形式** + +select id.userName from a1 union select id.userName from a2 + +##### 分页查询 + +#### 更新 + + update xxx set yyy = a1,zzz = b2 where id = 1 + +#### 插入 + + insert into xxx() values(),() + +#### 删除 + + delect xxx where id =1 + +#### SqlServer使用的是微软扩展的语句T-SQL + +# 数据库设计 + +### 信息收集 + +- 应用程序的业务有其针对性,数据库必然存储相关的数据 + +- 该阶段的成果从很大程度上决定了将来数据库存储信息的数据结构和容量 + +- 明确哪些问题必须关心,哪些问题不用去关心 + + ### 建模 + + 和面向对象的程序设计一样,在创建数据库之前,也是设计过程的初级阶段,我们需要为后面的主体工作做充分的准备,这些准备包括 + + - 与数据库相关的将来的应用程序的需求分析,主要是信息收集 + - 将这些信息归纳并用图形符号进行标识 + +#### E-R图转换为关系模型 + +- 1对1: + - 可以转换为一个独立的关系模式 + - 可以与任意一端对应的关系模式合并,***在任意一方加入对方的主键*(主码)变为其外键(外码),** + - **并加入联系本身的属性**。 +- 1对n,n对1: + - 可以转换为一个独立的关系模式 + - 可以与n端对应的关系模式合并**,将1方的主键加入n方作为其外键**,**并将联系的属性也加入n方** +- m对n: + - 可以转换为一个独立的关系模式(新建一张关系表)**,将联系双方的主键(主码)加入其中,并将联系的属性也加入其中。** + + + +### **数据规范化** + +仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构。 + +Dr E.F.codd 最初定义了规范化的三个级别,范式是具有最小冗余的表结构。这些范式是: + +- 第一范式(1st NF -First Normal Fromate) +- 第二范式(2nd NF-Second Normal Fromate) +- 第三范式(3rd NF- Third Normal Fromate) + +#### 第一范式 (1st NF) + +- 第一范式的目标是**确保每列的原子性** +- 如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF) + +#### 第二范式 (2nd NF) + +如果一个关系满足第一范式,并且除了主键以外的其他列都依赖于该主键,则满足第二范式(2NF) + +#### 第三范式 (3rd NF) + +如果一个关系满足第二范式,并且除了主键以外的其他列都依赖,且直接于主键列,则满足第三范式(3NF) + +订单表(n):订单编号,订购日期,顾客编号 + +顾客表(1):顾客编号,顾客姓名 + +1-->1 + +1--n +