1

Mysql合理设计数据表

Posted by 撒得一地 on 2015年10月27日 in Mysql优化

在Mysql设计表时,一般遵从3NF(范式)规则。抛开Mysql不说,一般关系型数据库都应尽量遵从这个原则,但这并不是绝对的。这里先提一下数据库的分类,一般分为:关系型数据库和非关系型数据库。而常见的关系型数据库有:mysql、oracle、db2、sql server、sysbase、informix等。非关系型数据库有:Mongodb、redis等。非关系型数据库一般的特点是面向对象或者文档。

那么什么样的表才是符合3NF (范式)?设计表的范式,是一个循序渐进的过程,即首先符合1NF,然后满足2NF,最后进一步满足3NF。

何为1NF?1NF即表的列具有原子性,不可再分解,只要数据库是关系型数据库,就自动满足1NF。

2NF就是说表中的记录是唯一的,通常我们设计一个主键来实现(如将表中的数据设为自增)。

3NF: 即表中不要有冗余数据, 就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放. 比如下面的设计就是不满足3NF:

将上面改成下面即符合3NF:

但是,并不是所有设计都要死死遵循3NF规则,毕竟开发过程中什么问题都可能碰到。所以,有时候该反3NF就要反3NF。没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。

具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。

上面主要讲概念设计阶段应该注意的规则。在物理设计阶段要考虑的因素则复杂得多。一般包括下面几个方面:

字段命名规则的考虑,通常用通俗易懂、具有代表性的名字进行命名。
多数开发语言命名规则:比如MyAdress
多数开源思想命名规则:my_address

字段类型的选择的一般原则:
根据需求选择合适的字段类型,在满足需求的情况下字段类型尽可能小。
只分配满足需求的最小字符数,不要太慷慨。
原因:更小的字段类型更小的字符数占用更少的内存,占用更少的磁盘空间,占用更少的磁盘IO,以及占用更少的带宽。

存储引擎的选择
Myisam:数据库并发不大,读多写少,而且都能很好的用到索引,sql语句比较简单的应用可以考虑使用。
Innodb:并发访问大,写操作比较多,有外键、事务等需求的应用,系统内存开销较大等时可以考虑。

编码选择
单字节 latin1
多字节 utf8(汉字占3个字节,英文字母占用一个字节)
如果含有中文字符的话最好都统一采用utf8类型,避免乱码的情况发生。

物理设计阶段考虑的因素比较多,设计情况通常根据相应的开发场景来定,这时候应尽量的考虑得全面一些。

欢迎转载,转载请注明:http://coderschool.cn/867.html

标签:,

上一篇:已是最后文章

下一篇:

相关推荐

1 Comment

Comments are closed. Would you like to contact the author directly?
网站地图|XML地图

Copyright © 2015-2024 技术拉近你我! All rights reserved.
闽ICP备15015576号-1 版权所有©psz.