- SQL 教程
- SQL - 首页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL 数据库
- SQL - 创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL - 备份数据库
- SQL 表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 截断表
- SQL - 克隆表
- SQL - 临时表
- SQL - 修改表
- SQL - 删除表
- SQL - 删除表
- SQL - 约束
- SQL 查询
- SQL - 插入查询
- SQL - 选择查询
- SQL - Select Into
- SQL - Insert Into Select
- SQL - 更新查询
- SQL - 删除查询
- SQL - 排序结果
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL - Where 子句
- SQL - Top 子句
- SQL - Distinct 子句
- SQL - Order By 子句
- SQL - Group By 子句
- SQL - Having 子句
- SQL - AND & OR
- SQL - 布尔 (BIT) 运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY, ALL 运算符
- SQL - EXISTS 运算符
- SQL - CASE
- SQL - NOT 运算符
- SQL - 不等于
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - 内连接
- SQL - 左连接
- SQL - 右连接
- SQL - 交叉连接
- SQL - 全连接
- SQL - 自连接
- SQL - 删除连接
- SQL - 更新连接
- SQL - 左连接 vs 右连接
- SQL - Union vs Join
- SQL 键
- SQL - 唯一键
- SQL - 主键
- SQL - 外键
- SQL - 复合键
- SQL - 备用键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - 唯一索引
- SQL - 聚集索引
- SQL - 非聚集索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - Min & Max
- SQL - 空函数
- SQL - 检查约束
- SQL - 默认约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期 & 时间
- SQL - 游标
- SQL - 公共表表达式
- SQL - Group By vs Order By
- SQL - IN vs EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本 & 图片函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
第一范式 (1NF)
数据库规范化是有效组织数据库中数据的过程,目的是消除数据库中的冗余数据并确保数据依赖关系合理。各种规范化形式用于消除或减少数据库表中的数据冗余。
什么是第一范式 (1NF)?
第一范式 (1NF) 设置了组织数据库中数据的基本规则。如果一个数据库满足以下条件,则称其处于第一范式:
规则 1(原子值) - 表的每一列都应只包含原子值。原子值是不能进一步细分的 值。
规则 2(无重复组) - 没有重复的数据组。这意味着表不应包含重复的列。
在设计数据库表时,您必须注意至少符合第一范式,否则在数据库操作过程中会遇到很大的问题。
规则 1 - 原子值
表的每一列都应只包含原子值。原子值是不能进一步细分的 值。
考虑以下用于存储客户数据的 CUSTOMERS 表:
ID | 姓名 | 年龄 | 薪资 | 城市 | 国家 |
---|---|---|---|---|---|
1 | Ramesh | 32 | 2000.00 | Hyderabad, Delhi | 印度 |
2 | Mukesh | 40 | 5000.00 | 纽约 | 美国 |
3 | Sumit | 45 | 4500.00 | 马斯喀特 | 阿曼 |
4 | Kaushik | 25 | 2500.00 | 加尔各答 | 印度 |
此表不处于第一范式,因为城市列可以包含多个值。例如,第一行包含值“海得拉巴”和“德里”。
现在,为了使此表达到第一范式,我们必须考虑一个实际问题,即客户可以居住在不同的城市,这些城市可能在同一个国家或不同的国家。因此,我们将表拆分为两个单独的表,如下所示:
CUSTOMERS 表
ID | 姓名 | 年龄 | 薪资 |
---|---|---|---|
1 | Ramesh | 32 | 2000.00 |
2 | Mukesh | 40 | 5000.00 |
3 | Sumit | 45 | 4500.00 |
4 | Kaushik | 25 | 2500.00 |
CUSTOMERS_ADDRESS 表
ID | 城市 | 国家 |
---|---|---|
1 | 海得拉巴 | 印度 |
1 | 德里 | 印度 |
2 | 纽约 | 美国 |
3 | 马斯喀特 | 阿曼 |
4 | 加尔各答 | 印度 |
规则 2 - 无重复组
没有重复的数据组。这意味着表不应包含重复的列。
考虑以下用于存储客户数据的 CUSTOMERS 表:
ID | 姓名 | 年龄 | 薪资 | 城市1 | 城市2 | 国家 |
---|---|---|---|---|---|---|
1 | Ramesh | 32 | 2000.00 | 海得拉巴 | 德里 | 印度 |
2 | Mukesh | 40 | 5000.00 | 纽约 | 美国 | |
3 | Sumit | 45 | 4500.00 | 马斯喀特 | 阿曼 | |
4 | Kaushik | 25 | 2500.00 | 加尔各答 | 印度 |
此表不处于第一范式,因为我们重复了城市列两次,并且您可以在当前表中看到一些问题。此表始终在磁盘上为两个城市保留空间,无论该人是否居住在两个城市。
为了消除重复的列并将表转换为第一范式,请将表拆分为两个表。将重复的列放入其中一个表中,如下所示:
CUSTOMERS 表
ID | 姓名 | 年龄 | 薪资 |
---|---|---|---|
1 | Ramesh | 32 | 2000.00 |
2 | Mukesh | 40 | 5000.00 |
3 | Sumit | 45 | 4500.00 |
4 | Kaushik | 25 | 2500.00 |
CUSTOMERS_ADDRESS 表
ID | 城市 | 国家 |
---|---|---|
1 | 海得拉巴 | 印度 |
1 | 德里 | 印度 |
2 | 纽约 | 美国 |
3 | 马斯喀特 | 阿曼 |
4 | 加尔各答 | 印度 |
现在我们已经规范化了表,这些表满足处于第一范式的要求,现在我们可以为同一个客户分配多个城市而不会浪费空间。
广告