四、 设计一张漂亮的表
上一章讲了如何通过索引来提速我们的查询语句,这一章让我们回到数据库开发的初始阶段,建表。谈谈怎样设计一张漂亮的表。
1. 满足三范式
1NF: 即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只要数据库是关系型数据库(mysql/oracle/db2/informix/sysbase/sqlserver),就自动的满足1NF
数据库的分类
关系型数据库: mysql/oracle/db2/informix/sysbase/sql server
非关系型数据库: 面向对象或者集合
面向文档数据库: MongoDB
2NF: 表中的记录是唯一的, 就满足2NF, 通常我们设计一个主键来实现。一般情况下,表中都必须设置主键,并且一般不含业务逻辑,可以设置为自增长。
3NF: 即表中不要有冗余数据, 就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放.
有时候为了减少查询次数,可以容忍冗余。
2. 字段数目不要过多
一张表的字段过于庞大,会导致查询时的扫描范围加大,即使你并没有查询相应字段。
所以,如果一张表某个字段,信息量大,但是我们很少查询,则可以考虑把这些字段,单独的放入到一张表中,这种方式称为垂直分割
3. 选择合适的字段类型
在创建表的时候要选取最适用的字段属性。
一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小
举个例子
11位的手机号
有两种类型可以存储
Bigint、char(11)。Int类型最大2147483647不可存
考虑到Bigint占20字节,而char(11)占11*2=22(gbk)或11*3=33(utf-8),所以使用bigInt是最好的。
如果在创建表之后发现表的字段设置不够合理想修改时怎么修改呢?
4. 修改表结构
如果发现表的字段设置不够合理想修改时怎么修改呢,有两种方法。
传统方法
先使用show createtable 查看原先怎样创建字段的
然后就可以根据需要修改了
- alter table patent_data modify mingcheng varchar(500) DEFAULT NULL COMMENT '名称';
快速方法(简单粗暴而高效)
创建一个结构是你所需要的空表,关闭mysql,在文件夹中直接复制新生成的表的frm文件替换掉原来表的的frm文件
注:
Frm文件位于mysql安装目录下的 /data/数据库名 目录下