首页常见问题正文

数据库的三范式是什么?

更新时间:2023-04-26 来源:黑马程序员 浏览量:

IT培训班

  数据库的三范式是指关系数据库设计中的一些规则,用于减少数据冗余、提高数据一致性和避免数据插入、更新和删除时出现异常情况。以下是三范式的概述:

  1.第一范式(1NF):

  表中的每个字段都应该是原子性的,即不可再分解的基本数据类型,不能有多值或复杂类型的字段。例如,一个订单表中的商品字段应该是单个商品而不是多个商品的集合。

  2.第二范式(2NF):

  表中的每个非主键字段都应该完全依赖于主键,而不是依赖于主键的一部分。这意味着每个表只应该包含一组相互独立的属性。例如,如果一个订单表包含商品和商品价格,则商品价格是应该是和商品ID关联的,而不是和订单ID关联的。

  3.第三范式(3NF):

  在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和价格,供应商表包含了主键、供应商名称、地址和电话。订单表和商品表之间通过外键关系建立了联系,而不是在订单表中添加商品价格等非主键信息,从而避免了数据冗余。

分享到:
在线咨询 我要报名
和我们在线交谈!