数据库表结构设计,常见的数据库管理系统( 二 )
二、设计规范1、涉及模块通过上面几个表设计的案例,可以看到表设计关联到数据库的各个方面知识:数据类型,索引,编码,存储引擎等 。表设计是一个很大的命题,不过也遵循一个基本规范:三范式 。
2、三范式
- 基础概念
一范式表的列的具有原子性,不可再分解,即列的信息,不能分解,关系型数据库MySQL、Oracle等自动的满足 。
【数据库表结构设计,常见的数据库管理系统】二范式每个事实的数据记录只会出现一次, 不会冗余, 通常设计一个主键来实现 。
三范式要求一个表中不包含已经存在于其它表的非主键信息,例如部门和员工的信息,员工表包含部门表的主键ID,则可以关联获取相关信息,没必要在员工表保存相关信息 。
- 优缺点对比
范式化设计范式化结构设计通常更新快,因为冗余数据较少,表结构轻巧,也更好的写入内存中 。但是查询起来涉及到关联,代价非常高,非常损耗查询性能 。
反范式化设计所有的数据都在一张表中,避免关联查询,索引的有效性更高,但是数据的冗余性极高 。
- 建议结论
三、字段属性合适的字段类型对于高性能来说非常重要,基本原则如下:简单的类型占用资源更少;在可以正确存储数据的情况下,选最小的数据类型 。
1、数据类型选择
- 整数类型
- 实数类型
- 字符类型
- 时间类型
MySQL的字段类型有很多种,可以根据数据特性选择合适的,这里只描述常见的几种类型 。
2、基础用法操作
- 数据类型
ALTER TABLE ms_user_sso MODIFY state CHAR(1) DEFAULT '0' ;ALTER TABLE ms_user_sso MODIFY state INT(1) DEFAULT '1' COMMENT '状态:0不可用,1可用';
修改名称位置ALTER TABLE ms_user_sso CHANGE log_ip login_ip VARCHAR(32) AFTER update_time ;
- 索引使用
添加索引
ALTER TABLE ms_user_wallet ADD INDEX user_id_index(user_id) ;CREATE INDEX state_index ON ms_user_wallet(state) ;
查看索引
SHOW INDEX FROM ms_user_wallet;
删除索引
DROP INDEX state_index ON ms_user_wallet ;
修改索引不具有真正意义上的修改,可以把原有的索引删除之后,再次添加索引 。