更新时间:2023-04-26 来源:黑马程序员 浏览量:
数据库的三范式是指关系数据库设计中的一些规则,用于减少数据冗余、提高数据一致性和避免数据插入、更新和删除时出现异常情况。以下是三范式的概述:
表中的每个字段都应该是原子性的,即不可再分解的基本数据类型,不能有多值或复杂类型的字段。例如,一个订单表中的商品字段应该是单个商品而不是多个商品的集合。
表中的每个非主键字段都应该完全依赖于主键,而不是依赖于主键的一部分。这意味着每个表只应该包含一组相互独立的属性。例如,如果一个订单表包含商品和商品价格,则商品价格是应该是和商品ID关联的,而不是和订单ID关联的。
在2NF的基础上,消除非主键字段之间的传递依赖,即不允许一个非主键字段依赖于另一个非主键字段。这可以通过将这些字段拆分到单独的表中来实现。例如,一个订单表中,如果商品价格依赖于商品的供应商,则应该将供应商信息存储在单独的表中,并与商品关联。
以下是一个简单的示例代码演示如何在 MySQL 中创建符合三范式的表:
-- 创建订单表 CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE ); -- 创建商品表 CREATE TABLE products ( product_id INT PRIMARY KEY, product_name VARCHAR(255), supplier_id INT, price DECIMAL(10,2) ); -- 创建供应商表 CREATE TABLE suppliers ( supplier_id INT PRIMARY KEY, supplier_name VARCHAR(255), supplier_address VARCHAR(255), supplier_phone VARCHAR(20) ); -- 在订单表和商品表之间建立外键关系 ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id); ALTER TABLE products ADD CONSTRAINT fk_supplier FOREIGN KEY (supplier_id) REFERENCES suppliers(supplier_id);
在这个示例中,订单表、商品表和供应商表都符合三范式。订单表包含了主键、顾客ID和订单日期,商品表包含了主键、商品名称、供应商ID和价格,供应商表包含了主键、供应商名称、地址和电话。订单表和商品表之间通过外键关系建立了联系,而不是在订单表中添加商品价格等非主键信息,从而避免了数据冗余。