mysql笔记三 数据表三大设计范式
2020-07-18 04:57
567 查看
数据表三大设计范式
第一范式
1NF
数据表中的所有字段都是不可分割的原子值
mysql> create table student2( id int primary key, name varchar(20), address varchar(30) ); mysql> insert into student2 values(1,'张三','中国江苏省无锡市'); mysql> insert into student2 values(2,'李四','中国江苏省南京市'); mysql> insert into student2 values(3,'王五','中国上海上海市'); mysql> select * from student2; +----+--------+--------------------------+ | id | name | address | +----+--------+--------------------------+ | 1 | 张三 | 中国江苏省无锡市 | | 2 | 李四 | 中国江苏省南京市 | | 3 | 王五 | 中国上海上海市 | +----+--------+--------------------------+ 3 rows in set (0.00 sec)
字段值还可以继续拆分的就不满足第一范式,字段不可拆分满足第一范式
mysql> create table student3( id int primary key, name varchar(20),country varchar(30),provence varchar(30),city varchar(30) ); mysql> insert into student3 values(1,'张三','中国','江苏省','无锡市'); mysql> insert into student3 values(2,'李四','中国','江苏省','南京市'); mysql> insert into student3 values(3,'王五','中国','上海','上海市'); mysql> select * from student3; +----+--------+---------+-----------+-----------+ | id | name | country | provence | city | +----+--------+---------+-----------+-----------+ | 1 | 张三 | 中国 | 江苏省 | 无锡市 | | 2 | 李四 | 中国 | 江苏省 | 南京市 | | 3 | 王五 | 中国 | 上海 | 上海市 | +----+--------+---------+-----------+-----------+ 3 rows in set (0.00 sec)
范式设计的越详细对于某些实际操作可能更好,但不一定都是好处,以实际需求决定。
第二范式
2NF
必须满足第一范式的前提下,第二范式要求除主键外的每一列都必须完全依赖于主键。
如果要出现不完全依赖,只可能发生在联合主键的情况下。
create table myorder( product_id int, consumer_id int, product_name varchar(20), consumer_name varchar(20), primary key(product_id,consumer_id) ); 除主键以外的列只依赖于主键的部分字段。
拆表
create table myorder( order_id int primary key, product_id int, consumer_id int ); create table product( id int primary key, name varchar (20) ); create table consumer( id int primary key, name varchar (20) ); 满足第二范式
第三范式
3NF
必须先满足第二范式,除主键列的其他列之间不能有传递依赖的关系。
create table myorder( order_id int primary key, product_id int, consumer_id int, consumer_phone varchar(15) //此处删掉 );
consumer_phone varchar(15)与consumer_id int有关依赖关系。
所以应该
create table consumer( id int primary key, name varchar (20), consumer_phone varchar(15) //放在这里 );
附加:一处错误
mysql> insert into student2 values(1,'zs','地球'); ERROR 1366 (HY000): Incorrect string value: '\xE5\x9C\xB0\xE7\x90\x83' for column 'address' at row 1
报错不能用中文
解决:
整个修改:
mysql> set names utf8; Query OK, 0 rows affected (0.00 sec)
(此处修改了两个字段可以使用中文name和address)
一个字段一个字段改
mysql> alter table student2 change address address varchar(30) character set utf8; Query OK, 1 row affected (0.03 sec) mysql> alter table student2 change name name varchar(20) character set utf8;
相关文章推荐
- 数据库:深入浅出mysql学习笔记【超级详细(十二)番外篇】--数据库设计的三大范式(对于数据量大的数据库有明显增幅作用,需严格执行)
- MySQL学习笔记:数据库的三大设计范式
- MySQL数据表设计,三大范式
- MySQL数据管理(七)(数据库设计规范及三大范式)
- MySQL学习笔记 - 数据库设计-三大范式
- 狂神Java学习笔记————MySQL(五)————事务,索引,用户管理,数据库备份和规范数据库数据(三大范式)
- MySQL中数据中设计中的范式与反范式
- 数据库结构设计的步骤与三大数据范式
- JAVA-20-数据约束、数据库设计三大范式、多表查询、存储过程、触发器、数据库权限
- mysql高级查询及设计三大范式
- 【笔记】菜鸟制作:设计股票交易数据在MYSQL中的表设计(表结构复制、表数据复制)
- [学习笔记]数据库设计三大范式与BCNF,学习笔记
- MySQL学习笔记20151007数据类型主键外键多对多设计思想
- 【mysql的设计与优化专题(2)】数据中设计中的范式与反范式
- 【mysql的设计与优化专题(2)】数据中设计中的范式与反范式
- mysql笔记(一)--设计一个项目需求,灌入一万数据先
- 数据库设计三大范式与BCNF,学习笔记
- MySQL中数据中设计中的范式与反范式
- (寒假)数据库(go使用mysql,数据库设计三大范式)------2020.01.19
- 数据表三大设计范式