你真的会玩SQL吗?三范式、数据完整性

简介: 你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接、外连接 你真的会玩SQL吗?三范式、数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节点的方法 你真的会玩SQL吗?让人晕头转向的三值逻辑 你真的会玩SQL吗?EXIS...

 

你真的会玩SQL吗?系列目录

你真的会玩SQL吗?之逻辑查询处理阶段

你真的会玩SQL吗?和平大使 内连接、外连接

你真的会玩SQL吗?三范式、数据完整性

你真的会玩SQL吗?查询指定节点及其所有父节点的方法

你真的会玩SQL吗?让人晕头转向的三值逻辑

你真的会玩SQL吗?EXISTS和IN之间的区别

你真的会玩SQL吗?无处不在的子查询

你真的会玩SQL吗?Case也疯狂

你真的会玩SQL吗?表表达式,排名函数

你真的会玩SQL吗?简单的 数据修改

你真的会玩SQL吗?你所不知道的 数据聚合

你真的会玩SQL吗?透视转换的艺术

你真的会玩SQL吗?冷落的Top和Apply

你真的会玩SQL吗?实用函数方法汇总

你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上)

你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(下)

 

每次上新功能时都需要添加新表,这时就要涉及到表结构的设计,那就要提到三范式,对于三范式教科书上说得很绕口,那简单点的呢?

   三范式

第一范式:属性不可分,不允许存在隐藏字段,属性保持“原子性”

第二范式:要有主键。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

第三范式:要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

 

正规化范式(BCDF):所有表中的决定因素必须是一个候选键,如果只有一个候选键,那么就和第三范式是一样的。

第四范式(4NF):消除多值依赖。

第五范式(5NF):消除循环依赖。

我们设计表结构往往都尊从简单的三范式,从其他元素中消除数据冗余问题, 从特定的表中最小化冗余意味着摆脱不必要的数据。

先看看目的,消除数据冗余的影响如下:

物理空间需要存储的数据减少。

数据变得更有组织。

范式化允许修改少量的数据(即单记录)。换言之,一个表的具体字段记录更新时,会影响其他引用他的表。

但是,设计表遵从范式越高则存在“过度设计“的问题,会增加多表间的查询开销,我们只能适度的设计,适度的反范式。如上图中3范式,若就想把楼栋一起查询出来,那从设计上可以分开,另用一个视图将楼栋名称一起查询出来即可。

 

数据完整性

数据库中的数据是从外界输入的,而数据的输入由于种种原因,会发生输入无效或错误信息。保证输入的数据符合规定,成为了数据库系统,尤其是多用户的关系数据库系统首要关注的问题。数据完整性因此而提出。

 

      数据完整性保证了在数据库中存储数据的一致性和正确性。

  1. 实体完整性:保证每一行都能被由称为主键的属性来标识
  2. 域完整性:保证在效范围内的值才能存储到相应列中
  3. 引用完整性:确保外键的值必须与相关的主键相匹配,禁止在从表中插入包含主表中不存在的关键字的数据行;
  4. 用户定义完整性:由用户指定的一组规则

 

   实现数据完整性的主要方式是约束
  1. 主键约束 primary key 确保字段值不重复不为NULL
  2. 唯一约束 unique 确保字段值不重复
  3. 外键约束 foreign key 确保字段值必须来自于指定表
  4. 检查约束 check 确保字段值的取值范围
  5. 缺省约束 default  给相应字段提供默认值
  6. 注:约束即可在创表时创建,也可在已存在的表上添加

 

练习

      若想更深入了解可看一下园友的文章  你真的了解 “范式”吗?
目录
相关文章
|
SQL 数据库
数据库原理与应用(SQL Server)笔记 第六章 数据完整性
数据库原理与应用(SQL Server)笔记 第六章 数据完整性
数据库原理与应用(SQL Server)笔记 第六章 数据完整性
|
SQL 关系型数据库 PostgreSQL
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 13 章 并发控制_13.4. 应用级别的数据完整性检查
13.4. 应用级别的数据完整性检查 13.4.1. 用可序列化事务来强制一致性 13.4.2. 使用显式锁定强制一致性 对于使用读已提交事务的数据完整性强制业务规则非常困难,因为对每一个语句数据视图都在变化,并且如果一个写冲突发生即使一个单一语句也不能把它自己限制到该语句的快照。
1200 0
|
SQL Go 数据库
SQL Server-数据库架构和对象、定义数据完整性(二)
前言 本节我们继续SQL之旅,本节我们如题来讲讲一些基本知识以及需要注意的地方,若有不妥之处,还望指出,简短的内容,深入的理解,Always to review the basics。 数据库架构和对象 数据库包含架构,而架构又包含对象,架构可以看做是表、视图、存储过程等对象的容器。
1300 0
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
101 13
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
4月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
59 6
|
4月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
316 1