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