- 1 数据库概述
- 1.1 DBMS 简史
- 1.2 数据库理论
- 1.3 事务 Transaction
- 1.4 SQL
- 1.5 数据库接口
- 本章参考
- 2 Relational 关系数据库
- 2.1 关系理论
- 2.2 Oracle
- 2.5 Microsoft SQL Server
- 2.6 DB2
- RDBS 比较
- 本章参考
- 3 NoSQL 非关系数据库
- 3.1 NoSQL 分类
- 3.2 键值 key-value 数据库
- 3.3 列存储数据库
- 3.4 图形数据库
- 本章参考
- 4 NewSQL
- 4.1 NewSQL 分类
- 4.2 分布式数据库 Distributed
- 本章参考
- 5 时序数据库 TSDB
- 5.1 简介
- 5.2 时序数据库比较
- 本章参考
- 6 SQL 引擎
- 6.1 SQL 引擎分类
- 6.2 SQL On Hadoop
- 本章参考
- 7 其它数据库
- 7.1 内存数据库 In-memory
- 7.2 嵌入式数据库 Embed
- 7.3 搜索引擎
- 本章参考
- 8 各种数据库分析比较
- 8.1 数据库排行 db-engines
- 8.2 数据库技术选型
- 8.3 DB 性能比较
- 8.4 国产数据库产品列表
- 8.5 DB 常用 SQL 比较
- 本章参考
- 9 SQL 调优
- 9.1 SQL JOIN
- 9.2 SQL 执行流程
- 10 数据库大型应用实例
- 10.1 负载均衡技术
- 10.2 数据库的高可用 HA
- 10.3 数据库的读写分离
- 10.4 数据库拆分(分布式)
- 10.5 跨库查询
- 本章参考
- 参考资料
- 附录
2.1 关系理论
在 关系模型 中, 关系 是描述现实世界的 实体 及 其之间各种联系的单一的 数据结构 。由关系的名称和一组具有共同属性的无序的 多元组 构成。关系可以看做是一个 笛卡尔积 的有限 子集 , 笛卡尔积中的 元组 并不是全都有意义,只有有意义的那些才能成为关系。
表格 11 主键、外键和索引的区别
主键 | 外键 | 索引 | |
---|---|---|---|
定义 | 唯一标识一条记录,不能有重复的,不允许为空 | 表的外键是另一表的主键,外键可以有重复的,可以是空值 | 该字段没有重复值,但可以有一个空值 |
作用 | 用来保证数据完整性 | 用来和其他表建立联系用的 | 是提高查询排序的速度 |
个数 | 主键只能有一个 | 一个表可以有多个外键 | 一个表可以有多个惟一索引 |
2.1.1 关系操作 SQL
关系模块中常用的操作包括:
数据查询 SELECT
- 选择
- 投影
- 连接 join: left/right/inner
- 并 union
- 交
- 差
- 除
数据操作
- 增加 INSERT
- 删除 DELETE
- 修改 UPDATE
- 更新 UPDATE/FLUSH
2.1.2 范式分析 Normal Form
设计关系 数据库 时,遵从不同的规范 要求 ,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前 关系数据库 有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、 第四范式 (4NF)和 第五范式 (5NF,又称完美范式)。
第一范式(1NF)
所谓第一范式(1NF)是指在 关系模型 中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的 每一列都是不可分割的原子数据项 ,而不能是集合,数组,记录等非原子数据项。
第二范式(2NF)
在 1NF 的基础上,非码属性必须完全依赖于候选码(在 1NF 基础上消除非主属性对主码的部分函数依赖)。第二范式(2NF) 要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性 ,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。
第三范式(3NF)
在 1NF 基础上, 任何非主属性 不依赖于其它非主属性(在 2NF 基础上消除传递依赖)
巴斯-科德范式(BCNF)
Boyce-Codd Normal Form(巴斯-科德范式)
在 1NF 基础上,任何非主属性不能对主键子集依赖(在 3NF 基础上消除对主码子集的依赖)
巴斯-科德范式(BCNF)是第三范式(3NF)的一个子集,即满足巴斯-科德范式(BCNF)必须满足第三范式(3NF)。
第一范式:要求字段原子化(无多值); 存在主键(主键可以是多个字段的组合,一张表只能一个主键,主键也是唯一索引,相当于 NOT NULL+UNIQUE);无重复字段组;无冗余字段;
第二范式 2NF:在第一范式基础上,无部分依赖(即组合关键字中某一关键字可以决定部分非关键字);
EG:表(a,b,c,d,e,f) , 组合主键(a,b)->(c,d,e,f), 其中(a)->(c,d)。
那么需拆表为:表 1(a,b,e,f),表 2(a,c,d)
第三范式 3NF:在第二范式基础上,无传递依赖;
EG: 关键字段 → 非关键字段 x → 非关键字段 y
满足范式要求的数据库设计是结构清晰的,同时可避免数据冗余和操作异常。这并不意味着不符合范式要求的设计一定是错误的,在数据库表中存在 1:1 或 1:N 关系这种较特殊的情况下,合并导致的不符合范式要求反而是合理的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论