MySQL的一二三范式详解(MySQL一二三范式)

MySQL的一二三范式详解

MySQL是一种关系型数据库管理系统,拥有一套严格的规范,也就是数据归一化的三范式,分别是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。本文将详细解释每个范式是什么及其使用方法,并附上相关的代码示例。

一范式(1NF)

第一范式(1NF)要求所有的数据项都必须是原子性的,也就是不能再被分解为更小的元素。例如,如果我们要存储一个人的信息,那么姓名、性别、年龄等应该是各自的单独字段,而不是一个字段里面还有多个信息。

下面是一个符合1NF规范的MySQL示例:

CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
gender ENUM('male', 'female') NOT NULL,
age INT NOT NULL,
PRIMARY KEY (id)
);

二范式(2NF)

第二范式(2NF)要求满足1NF的基础上,非主键的字段必须完全依赖于主键,而不是部分依赖。所谓部分依赖,就是某一字段依赖于主键的部分值,而不是全部值。

例如,我们要存储一家公司的信息,包括员工姓名、员工编号、部门名称、部门编号、部门地点等。如果我们以员工编号作为主键,那么部门名称、部门编号、部门地点都是依赖于部门信息的,而不是员工信息。因此,我们需要将部门信息拆分出来单独建表。

下面是一个符合2NF规范的MySQL示例:

CREATE TABLE employees (
emp_id INT NOT NULL,
emp_name VARCHAR(255) NOT NULL,
dept_id INT NOT NULL,
PRIMARY KEY (emp_id)
);

CREATE TABLE departments (
dept_id INT NOT NULL,
dept_name VARCHAR(255) NOT NULL,
dept_location VARCHAR(255) NOT NULL,
PRIMARY KEY (dept_id)
);

三范式(3NF)

第三范式(3NF)要求满足2NF的基础上,非主键的字段必须只依赖于主键,而不是其他非主键字段。所谓传递依赖,就是某一字段依赖于另一个非主键字段,而非主键字段又依赖于主键。

例如,我们要存储一个商品的信息,包括商品名称、颜色、尺码、价格、库存等。如果我们以商品名称作为主键,那么颜色、尺码、价格都是根据商品名称不同而不同的,而不是单独的属性。因此,我们需要将颜色、尺码、价格拆分出来单独建表。

下面是一个符合3NF规范的MySQL示例:

CREATE TABLE products (
prod_id INT NOT NULL,
prod_name VARCHAR(255) NOT NULL,
PRIMARY KEY (prod_id)
);
CREATE TABLE colors (
color_id INT NOT NULL,
color_name VARCHAR(255) NOT NULL,
PRIMARY KEY (color_id)
);

CREATE TABLE sizes (
size_id INT NOT NULL,
size_name VARCHAR(255) NOT NULL,
PRIMARY KEY (size_id)
);

CREATE TABLE prices (
prod_id INT NOT NULL,
color_id INT NOT NULL,
size_id INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
PRIMARY KEY (prod_id, color_id, size_id),
FOREIGN KEY (prod_id) REFERENCES products (prod_id),
FOREIGN KEY (color_id) REFERENCES colors (color_id),
FOREIGN KEY (size_id) REFERENCES sizes (size_id)
);
CREATE TABLE stocks (
prod_id INT NOT NULL,
color_id INT NOT NULL,
size_id INT NOT NULL,
stock INT NOT NULL,
PRIMARY KEY (prod_id, color_id, size_id),
FOREIGN KEY (prod_id) REFERENCES products (prod_id),
FOREIGN KEY (color_id) REFERENCES colors (color_id),
FOREIGN KEY (size_id) REFERENCES sizes (size_id)
);

总结

MySQL的数据归一化规范有三个范式,分别是1NF、2NF和3NF。不同的范式对应不同的规范和要求,可以避免出现数据冗余、不一致和数据更新异常等问题。在设计数据库时,需要根据具体情况选择不同的范式,并结合实际应用场景,合理规划表的结构和关系。


数据运维技术 » MySQL的一二三范式详解(MySQL一二三范式)