深入浅出MySQL三大范式,简书分享(mysql三大范式简书)
深入浅出MySQL三大范式
MySQL作为一种关系型数据库管理系统,采用非常严谨的数据规范来确保数据的一致性和正确性。其中,最基本的数据规范就是三大范式,也是MySQL应用中最基本、最重要的规范之一。
一、第一范式(1NF)
第一范式是指关系模式中的每个属性都应该是不可再分的,即不允许出现重复字段或多值字段。
例如,一张学生表中,如果不对每个学生的科目成绩进行单独的记录,从而将所有科目的成绩放在一个字段中,这样就会产生多值的情况,违背了第一范式的规范。
CREATE TABLE student
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
scores VARCHAR(50) NOT NULL
);
二、第二范式(2NF)
第二范式要求数据库表中的每一列都必须依赖于主键,而不是依赖于主键的一部分。也就是说,一个关系模式中应该不存在部分函数依赖的情况。
例如,一个订单表中包含订单编号、产品编号、客户名称、客户地址、产品类型、产品价格等字段。在此情况下,产品类型和产品价格属于冗余字段,因为他们并不取决于订单编号,而是取决于产品编号。为了避免这种情况,应该将产品编号、产品类型和产品价格放在一个单独的产品表中。
CREATE TABLE products
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
type VARCHAR(20) NOT NULL,
price DECIMAL(8,2) NOT NULL
);
CREATE TABLE orders
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
product_id INT NOT NULL,
customer_name VARCHAR(20) NOT NULL,
customer_address VARCHAR(50) NOT NULL,
FOREIGN KEY (product_id) REFERENCES products(id)
);
三、第三范式(3NF)
第三范式要求一个关系模式中属性不应该依赖于其他非关键字属性。也就是说,所有的非关键字属性都应该只与主键属性相关,而不是与其他非关键字属性相关。
例如,一张学生表中,如果在学生的表中同时包含学院名称和该学院的地址信息,则这两个信息之间是有冗余关系的。为了避免这种情况,可以将学院信息提取出来,放入一个单独的学院表中。
CREATE TABLE departments
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
address VARCHAR(50) NOT NULL
);
CREATE TABLE students
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
department_id INT NOT NULL,
FOREIGN KEY (department_id) REFERENCES departments(id)
);
通过遵循三大范式来规范数据库设计,既可以避免数据冗余,又可以确保数据的一致性和正确性。因此,在MySQL数据库应用中,三大范式是非常重要的规范,需要尽可能地遵循和应用。