###要搞清楚的一些问题
###数据库选择 常见的DBMS系统:oracle、sqlserver商业数据(企业级项目),mysql、pgsql开源数据库(互联网项目) oracle大的事务操作有优势。 sqlserver只用于winserver,与.net结合好。
列的数据类型一方面影响数据存储的开销,另一方面也会影响数据查询性能。 当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或者二进制类型,最好是字符类型。 对于相同级别的数据类型,应该优先选择占用空间小的类型。
日期和时间数据类型
date 3字节,日期,格式:2014-09-18
time 3字节,时间,格式:08:42:30
datetime 8字节,日期时间,格式:2014-09-18 08:42:30
timestamp 4字节,自动存储记录修改的时间
year 1字节,年份
整型
tinyint 1字节,范围(-128~127)
smallint 2字节,范围(-32768~32767)
mediumint 3字节,范围(-8388608~8388607)
int 4字节,范围(-2147483648~2147483647)
bigint 8字节,范围(+-9.22*10的18次方)
浮点型
float(m, d) 4字节,单精度浮点型,m总个数,d小数位
double(m, d) 8字节,双精度浮点型,m总个数,d小数位
decimal(m, d) decimal是存储为字符串的浮点数
字符串数据类型
char(n) 固定长度,最多255个字符
varchar(n) 可变长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-1个字符
longtext 可变长度,最多2的32次方-1个字符
###时间类型如何存储###
优点:字段长度比datetime小。 缺点:使用不方面,要进行函数转换。 限制:只能存储到2038-1-19 11:14:07即2^32
年 月 日 小时 分 秒 周
###其他注意事项###
如何选择主键
业务主键用户标识业务数据,进行表与表之间的关联 数据库逐渐为了优化数据存储
避免使用外键约束
避免使用触发器
关于预留字段
###反范式化表设计###
为了性能和读取效率的考虑,而适当的对第三范式的要求进行违反,而允许存在少量的数据冗余,即使有空间来换取时间。
##维护和优化##
###维护数据字典###
mysql为例,增加comment字段。
到出数据字段
select a.table_name,b.table_comment,a.column_name,a.column_type,a.column_comment from information_schema.columns a join information_schema.tables b on a.table_schema = b.table_schema and a.table_name = b.table_name where a.table_name='table_name';
###维护索引###
注意事项
###表结构的维护###
mysql 5.5之前可以使用pt-online-shcema-change mysql 5.6之后本身支持在线表结构的变更
数据库中适合的操作
###表的垂直拆分###
为了控制表的宽度可以进行表的垂直拆分
列1 | 列2 | 列3 | 列4 | 列5 | 列6 | 列7 |
---|---|---|---|---|---|---|
0:2 | 1:2 | 2:2 | 3:2 | 4:2 | 5:2 | 6:2 |
拆分成
列1 | 列2 | 列3 | 列4 |
---|---|---|---|
0:2 | 1:2 | 2:2 | 3:2 |
列1 | 列5 | 列6 | 列7 |
---|---|---|---|
0:2 | 4:2 | 5:2 | 6:2 |
###表的垂直拆分###
为了控制表的大小可以进行表的水平拆分
主键hash key拆分
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。