学习MySQL三范式,从易到难,易记易懂(mysql三范式怎么记)

学习MySQL三范式,从易到难,易记易懂

为了保证数据的完整性、一致性和有效性,数据库需要满足一定的规范和要求。其中最重要的就是三范式。MySQL三范式是指在设计数据库的时候,必须满足第一范式、第二范式和第三范式。本文将从易到难,为大家详细介绍三种范式的概念、设计原则以及实例演示。

一、第一范式(1NF)

第一范式是指数据表中的所有字段都是不可再分的最小单位,也就是说,每个字段都只能包含一个单一的值或属性。通过将数据分解成更小的单位,可以避免数据的冗余和重复,大大提高了数据的可靠性和管理性。

下面是一个符合第一范式的数据表示例:

CREATE TABLE `UserInfo` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',
`username` VARCHAR(50) NOT NULL COMMENT '用户名',
`password` CHAR(32) NOT NULL COMMENT '密码',
`eml` VARCHAR(50) NOT NULL COMMENT '邮箱',
`phone` VARCHAR(20) NOT NULL COMMENT '手机号码'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表';

在这个示例中,每个字段都只包含一个单一的值,符合第一范式的要求。

二、第二范式(2NF)

第二范式是指数据表中的非主键字段必须完全依赖于主键,也就是说,非主键字段必须与主键有直接关系。在实际应用中,这种依赖关系体现为一个主键可以对应多个非主键字段,而一个非主键字段只能对应一个主键。

下面是一个符合第二范式的数据表示例:

CREATE TABLE `Product` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '商品ID',
`name` VARCHAR(50) NOT NULL COMMENT '商品名称',
`description` TEXT NOT NULL COMMENT '商品描述',
`category_id` INT NOT NULL COMMENT '商品分类ID',
`price` DECIMAL(10,2) NOT NULL COMMENT '商品价格'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品信息表';
CREATE TABLE `Category` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '分类ID',
`name` VARCHAR(50) NOT NULL COMMENT '分类名称'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品分类表';

在这个示例中,商品信息表中的“分类ID”与商品分类表中的“分类ID”存在直接关系,符合第二范式的要求。

三、第三范式(3NF)

第三范式是指数据表中的非主键字段不依赖于其他非主键字段,也就是说,任何一个非主键字段都不能间接依赖于其他非主键字段。通过对数据表的进一步细化,可以避免数据重复和冗余,提高数据的存储和查询效率。

下面是一个符合第三范式的数据表示例:

CREATE TABLE `Order` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '订单ID',
`user_id` INT NOT NULL COMMENT '用户ID',
`order_time` DATETIME NOT NULL COMMENT '下单时间',
`total_price` DECIMAL(10,2) NOT NULL COMMENT '订单总价'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单信息表';

CREATE TABLE `OrderDetl` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '订单明细ID',
`order_id` INT NOT NULL COMMENT '订单ID',
`product_id` INT NOT NULL COMMENT '商品ID',
`product_amount` INT NOT NULL COMMENT '商品数量',
`product_price` DECIMAL(10,2) NOT NULL COMMENT '商品价格'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单明细表';

CREATE TABLE `Product` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '商品ID',
`name` VARCHAR(50) NOT NULL COMMENT '商品名称',
`description` TEXT NOT NULL COMMENT '商品描述',
`category_id` INT NOT NULL COMMENT '商品分类ID',
`price` DECIMAL(10,2) NOT NULL COMMENT '商品价格'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品信息表';

在这个示例中,订单明细表中的“商品ID”和“商品数量”以及“商品价格”都直接依赖于订单明细表的主键——“订单明细ID”,而不是直接依赖于订单信息表的主键——“订单ID”,符合第三范式的要求。

总结

MySQL三范式是设计数据库的基本原则之一,它可以避免数据冗余、重复和不一致等问题,在提高数据存储和查询效率的同时,保证了数据的完整性和一致性。建议在实际应用中,根据业务需求灵活运用三范式原则,设计出合理、高效的数据库结构。


数据运维技术 » 学习MySQL三范式,从易到难,易记易懂(mysql三范式怎么记)