欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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)
);
相关标签: 数据库 mysql