MySQL之三大范式
程序员文章站
2022-05-30 09:48:11
...
--第一范式
--1NF
--数据表的所有字段都是不可分割的原子值
--字段值可以拆分的不满足第一范式
create table student2(
id int primary key,
name varchar(20),
address varchar(20)
);
mysql> insert into student2 values(1,'zhangsan','江西省南昌市');
Query OK, 1 row affected (0.41 sec)
mysql> insert into student2 values(2,'刘san','江西省赣州市');
Query OK, 1 row affected (0.40 sec)
mysql> insert into student2 values(3,'san','江西省九江市');
Query OK, 1 row affected (0.15 sec)
mysql> insert into student2 values(4,'zhansan','江西省南昌市');
Query OK, 1 row affected (0.12 sec)
mysql> select * from student2;
+----+----------+--------------+
| id | name | address |
+----+----------+--------------+
| 1 | zhangsan | 江西省南昌市 |
| 2 | 刘san | 江西省赣州市 |
| 3 | san | 江西省九江市 |
| 4 | zhansan | 江西省南昌市 |
+----+----------+--------------+
4 rows in set (0.00 sec)
create table student3(
id int primary key,
name varchar(20),
province varchar(20),
city varchar(20)
);
mysql> insert into student3 values(1,'zhangsan','江西省','南昌市');
Query OK, 1 row affected (0.17 sec)
mysql> insert into student3 values(2,'刘san','江西省','赣州市');
Query OK, 1 row affected (0.14 sec)
mysql> insert into student3 values(3,'san','江西省','九江市');
Query OK, 1 row affected (0.18 sec)
mysql> insert into student3 values(4,'zhansan','江西省','南昌市');
Query OK, 1 row affected (0.15 sec)
mysql> select * from student3;
+----+----------+----------+--------+
| id | name | province | city |
+----+----------+----------+--------+
| 1 | zhangsan | 江西省 | 南昌市 |
| 2 | 刘san | 江西省 | 赣州市 |
| 3 | san | 江西省 | 九江市 |
| 4 | zhansan | 江西省 | 南昌市 |
+----+----------+----------+--------+
4 rows in set (0.00 sec)
--据实际开发需求设计,不用非得设计某种范式
--2.第二范式
--在满足第一范式的前提下,第二范式要求,除主键外的每列都必须完全依赖于主键。
--如果出现不完全依赖的情况下,则是联合主键的情况下。
create table myorder(
produce_id int,
customer_id int,
produce_name varchar(20),
customer_name varchar(20),
primary key(produce_id,customer_id)
);
--问题?
--除主键以外的其他列,部分依赖于主键
--拆表
create table myorder(
order_id int primary key,
produce_id int,
customer_id int
);
create table customer(
customer_id int primary key,
customer_name varchar(20)
);
create table product(
produce_id int primary key,
produce_name varchar(20)
);
--3.第三范式
--必须先满足第三范式,除主键列的其他列之间不能有传递依赖
--不满足如
create table myorder(
order_id int primary key,
produce_id int,
customer_id int,
customer_phone varchar(20)
);
--应该放
create table customer(
customer_id int primary key,
customer_name varchar(20),
customer_phone varchar(20)
);