深入浅出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数据库应用中,三大范式是非常重要的规范,需要尽可能地遵循和应用。


数据运维技术 » 深入浅出MySQL三大范式,简书分享(mysql三大范式简书)