MySQL

Mysql逻辑设计与物理设计

2019-03-24  本文已影响31人  barry_di

一、逻辑设计

1.范式设计

(1)数据范式设计一

错误的范式
字段name-age不是单一属性

id name-age
1 xiaoming-18

正确的范式

id name age
1 xiaoming 18

(2)数据范式设计二

id name
1 游戏机
2 手机

订单表

id address prd_id
1 北京 1
2 上海 1

正确范式:
产品表

id name
1 游戏机
2 手机

订单表

id address
1 北京
2 上海

订单中间表

id order_id prd_id
1 1 1
2 2 1

(3)数据范式设计三

id address 客户姓名 客户编号
1 北京 小明 bj123
2 上海 如花 sh123

2.反范式设计

3.范式化与反范式化的优缺点

范式设计

优点:

反范式设计

优点:

二、物理设计

(1)物理设计的过程

(2)命名规范

(3)存储引擎的选择

对比项 MyISAM InnoDB
主外键 不支持 支持
事务 不支持 支持
行表锁 表锁,不适合高并发操作 行锁,适合高并发操作
缓存 缓存索引,不缓存查询的数据 不仅缓存索引,还会缓存查询数据,对内存要求较高,而且内存的大小会对性能造成影响
表空间 小,因为MyISAM会压缩
关注点 性能 事务

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
仅从锁的角度来说:
表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用。
行级锁则更适合于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,如一些在线事务处理系统。

(4)数据类型的选择

datetime 与timestamp 都是日期类型,datetime与时区无关,而timestamp与时区有关。timestamp本质是使用int进行存储。所以效率会比datetime高。但是要考虑时区的问题。

上一篇 下一篇

猜你喜欢

热点阅读