数据库设计规范之第一范式(1NF)
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前 关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、 第四范式(4NF)和 第五范式(5NF,又称完美范式)。但总的来说,满足第一、二、三范式的数据库设计就已经很完美了。
所以,在这里我们主要介绍第一、二和三范式。本篇主要介绍 第一范式——1NF。关于第二范式和第三范式可以查看 数据库设计规范之第二范式 和 数据库设计规范之第三范式 这两篇文章
第一范式是数据库设计的最基本的规则,要满足以下几条规则
- 定义所需的数据项,因为它们会成为表中的列。
- 将相关数据项存入表格中。
- 确保没有重复的数据组。
- 确保有主键。
1NF 的第一条规则
在设计表时,必须定义数据项。我们要将数据组织成列,定义每列的数据类型,然后最后将相关列插入到定义的表中。
例如,将所有与地点相关的列放在 Location 表中,将那些与会员相关的列放在 MemberDetails 表中等等。
1NF 的第二条规则
要确保没有重复的数据组,现在我们来考虑这样的一张表
CREATE TABLE MEMBERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
ORDERS VARCHAR(155)
);
现在我们假设一个客户有多个订单,则表中的数据如下所示
ID | NAME | AGE | ADDRESS | ORDERS |
---|---|---|---|---|
63 | 迹忆 | 30 | 北京 | Cannon XL-200 |
63 | 迹忆 | 30 | 北京 | Battery XL-200 |
63 | 迹忆 | 30 | 北京 | Tripod Large |
我们看到,很明显这不符合第一范式,我们要确保没有重复的数据组。因此我们需要将上面的表进行拆分,将其分成两个表,然后使用外键将两个表对应起来。
MEMBERS 表
CREATE TABLE MEMBERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
PRIMARY KEY (ID)
);
这个表有一条记录
ID | NAME | AGE | ADDRESS |
---|---|---|---|
63 | 迹忆 | 30 | 北京 |
ORDERS 表
CREATE TABLE ORDERS(
ID INT NOT NULL,
MEMBER_ID INT NOT NULL,
ORDERS VARCHAR(155),
PRIMARY KEY (ID)
);
此表中将有以下几条记录
ID | MEMBER_ID | ORDERS |
---|---|---|
1 | 63 | Cannon XL-200 |
2 | 63 | Battery XL-200 |
3 | 63 | Tripod Large |
经过上面的拆分,我们就能确保表中没有重复的记录了。
1NF 的第三条规则
第一范式的最后规则,为我们已经创建的每个表创建一个主键。这个我们在上面创建表的时候已经为每张表创建了主键ID。
我们在设计表的时候遵循上面的这三条规则,就满足了第一范式。这也是设计表的最基本的规范。
在接下来的 第二范式 和 第三范式 的介绍中我们会看到满足它们的前提是都必须满足第一范式。
相关文章
MySQL 从 SQL 文件恢复数据库
发布时间:2023/05/09 浏览次数:191 分类:MySQL
-
本篇文章介绍了从 MySQL 中的 sql 文件恢复数据库。从 .sql 恢复数据库是一项简单的操作,可以使用 MySQL 工作台或命令行来实现。 本教程演示了从 SQL 文件恢复数据库的两种方法。
在 MySQL 中显示表或数据库的索引
发布时间:2023/05/09 浏览次数:107 分类:MySQL
-
本篇文章介绍了如何在 MySQL 中显示表或数据库的索引。 我们将学习如何从一个数据库或所有数据库中的一个或多个表中获取索引。
在 MySQL 中显示当前数据库
发布时间:2023/05/08 浏览次数:164 分类:MySQL
-
本篇文章重点介绍了可用于显示 MySQL 中当前数据库的各种查询。 我们将通过使用 Windows 命令行和 MySQL Workbench 来学习。
MySQL 中检查数据库是否存在
发布时间:2023/05/08 浏览次数:118 分类:MySQL
-
在本文中将介绍许多检查数据库是否存在于 MySQL 中的方法。检查数据库是否存在于 MySQL 中 系统模式是 MySQL 使用的模式。
使用 JDBC 连接到 MySQL 数据库
发布时间:2023/05/08 浏览次数:82 分类:MySQL
-
本文讨论 JDBC 以及使用 JDBC 连接数据库的要求。 我们还查看了一个示例,以了解如何实现 Java 代码来连接 MySQL 数据库。MySQL 为使用 Java 编程语言和 MySQL Connector/J 开发的应用程序提供连接。
在 MySQL 中显示表和数据库结构
发布时间:2023/04/19 浏览次数:170 分类:MySQL
-
本篇文章介绍了如何使用 mysqldump 实用程序、DESCRIBE、SHOW TABLES 和 SHOW CREATE TABLE 语句来显示 MySQL 中的表和数据库结构。
在 Windows 中备份 MySQL 数据库
发布时间:2023/04/19 浏览次数:77 分类:MySQL
-
本快速教程将讨论备份 MySQL 数据库并将其作为脚本保存在文件中。使用数据库时,建议定期备份数据库。
将密码存储在 MySQL 数据库中
发布时间:2023/04/18 浏览次数:81 分类:MySQL
-
在本指南中,您将能够了解如何在 MySQL 数据库中存储哈希密码,不同的技术及其用于存储哈希密码的具体方法。