物理设计
物理设计就是根据所选择的关系型数据库的特点对逻辑模型进行存储结构设计。它涉及的内容包含以下4方面:1. 定义数据库、表及字段的命名规范;2. 选择合适的存储引擎;3. 为表中的字段选择合适的数据类型;4. 建立数据库结构。
定义数据库、表及字段的命名规范
-
数据库、表及字段的命名要遵守可读性原则
-
数据库、表及字段的命名要遵守表意性原则
-
数据库、表及字段的命名
存储引擎
- MyISAM存储引擎是非事务的,锁粒度是表级的,主要应用于
select,insert
,不适合应用于读写操作频繁的场景,因为对于读写操作会进行锁表操作。 - MRG_MYISAM和MyISAM差不多
- Innodb存储引擎是支持事务,支持MVCC行级锁,适合任何场景
- Archive存储引擎不支持事务,支持行级锁,支持insert、select,适用于随机读取、更新、删除。
- Ndb Cluster是MySQL集群存储引擎 ,支持事务,支持行级锁,具有高可用性
数据类型
原则:当一个列可以选择多种数据类型时,应该优先考虑数值类型,其次是日期或二进制类型,最后是字符类型。对于相同级别的数据
类型,应该优先选择占用空间小的数据类型。
1. 数值类型
数值类型可以分为整数类型和实数类型。
其中,M表示整数类型的最大显示宽度; 对于浮点和定点类型,M是可以存储的总位数(精度);对于字符串类型,M是最大长度。 M
的最大允许值取决于数据类型。注意:当我们只存储两位数时,一种错误用法就是int(2),其实int(i)存储空间是由数据类型和是否是
unsigned决定的,i只是表示显示长度。int(11)和int(1)的存储空间是没差别的, int(11)的数据长度如果小于11,则默认补充空格,如果
int (11)字段被zerofill修饰,则默认补充0,而且字段被zerofill修饰会自动添加unsigned。因此,当我们只存储两位数时,使用tinyint才能
达到我们简约空间的目的。
注意:Decimal类型是精确类型的,如果我们需要存储精确数据,例如财务数据就必须使用Decimal类型,而不能使用float和double类型。
2. 字符串类型
字符串类型中有两种类型:char和varchar。
varchar(n)的存储规范
-
varchar存储变长内容,varchar需要额外的空间记录内容长度,当内容小于255字节时,需要一个额外字节,当内容大于255字节时,需要2个额外字节;
-
在jbk编码下,char占2个字节,在UTF-8编码下,char占用3个字节;
-
MySQL每行最多存储65535个字节;
-
varchar中的第1个字节表示是否为空,第二个字节和第3个字节表示长度,剩下字节表示实际内容,因此最大可用存储65535-1-2=65532 ;
create table t1(c varchar(n)) charset=gbk,则此处n的最大值为(65535-1-2)/2=32766 create t(c