同时不满足一、二、三范式的数据库表:销售记录表
|销售ID | 客户信息 | 产品信息 |销售日期 | |--------|---------------------|------------------------|---------| |1 |[Tom, New York] |[Phone, 500, Apple] | 2022-01 | |2 |[Jane, Los Angeles] |[Laptop, 1000, Dell] | 2022-01 |
修改为满足一范式(1NF):
客户信息和产品信息字段都不是原子性存在(不满足1NF)。
将非原子性的字段拆分开,使其每个字段都是不可分割的。
| 销售ID | 客户姓名 | 客户地址 | 产品名称 | 产品价格 | 产品品牌 | 销售日期 | |--------|---------|-------------|---------|--------|--------|---------| | 1 | Tom | New York | Phone | 500 | Apple | 2022-01 | | 2 | Jane | Los Angeles | Laptop | 1000 | Dell | 2022-01 |
修改为满足二范式(2NF):
产品信息里的品牌和价格 部分依赖 于销售ID(不满足2NF)。
将表拆分为两个,一个是销售表,一个是产品表。使每个字段都完全依赖于整个主键。
销售记录表:
| 销售ID | 客户姓名 | 客户地址 | 产品ID | 销售日期 | |--------|---------|-------------|-------|---------| | 1 | Tom | New York | 001 | 2022-01 | | 2 | Jane | Los Angeles | 002 | 2022-01 |
产品表:
| 产品ID | 产品名称 | 产品价格 | 产品品牌 | |-------|---------|---------|---------| | 001 | Phone | 500 | Apple | | 002 | Laptop | 1000 | Dell |
修改为满足三范式(3NF):
客户姓名、客户地址又 传递依赖 销售ID(不满足3NF)。
将销售记录表再次拆分为两个表,一个是销售表,一个是客户表。消除所有的传递依赖,满足了三范式。
销售记录表:
| 销售ID | 客户ID |产品ID| 销售日期 | |--------|-------|------|---------| | 1 | 001 | 001 | 2022-01 | | 2 | 002 | 002 | 2022-01 |
客户表:
| 客户ID | 客户姓名| 客户地址 | |-------|--------|------------| | 001 | Tom | New York | | 002 | Jane | Los Angeles|
产品表:
| 产品ID | 产品名称| 产品价格| 产品品牌 | |-------|--------|--------|--------| | 001 | Phone | 500 | Apple | | 002 | Laptop | 1000 | Dell |