美文网首页
数据库设计

数据库设计

作者: 春泥村雨 | 来源:发表于2018-08-12 18:30 被阅读14次

1. 数据库选型

1.1 常见 DBMS 系统:

  • 商业数据库(更适合企业级项目):Oracle、SQLServer

  • 开源数据库(适用于互联网项目):MySQL、PgSQL

2. MySQL常用存储引擎:Innodb

3. 数据库表及字段的命名规则

  • 可读性原则: 单词首字母大小写,MySQL 大小写敏感(设置)

  • 表意性原则

  • 长名原则: 少用缩写

4. 字段类型的选择原则

优先考虑数字类型,其次是日期或二进制类型,最后是字符类型,对于相同级别的数据类型,优先选择占用空间小的数据类型

以上原则主要从下面两个角度考虑:

  1. 在对数据进行比较(查询条件、JOIN 条件及排序)操作时:同样的数据,字符处理往往比数字处理慢;
  2. 在数据库中,数据处理以页为单位,列的长度越小,利于性能提升。

4.1 char 与 varchar 选择原则?

  1. 长度一致用 char;
  2. 如果列中的最大数据长度小于 50 Byte,则一般也考虑用 char。(注:如果这个列很少用,则基于节省空间和减少 I/O 的考虑,还是可以选择用 varchar)
  3. 一般不宜定义大于 50 Byte 的 char 类型列,大于 50 Byte的选择 varchar 类型。
    utf8,每个字符占用 3 个字节

4.2 decimal 与 float 选择原则?

  1. decimal 用于存储精确数据,float 只能用于存储非精确数据;
  2. float 的存储空间开销一般比 decimal 小(精确到 7 位小数需要 4 个字节,精确到 15 位小数需要 8 个字节)

4.3 时间类型存储选择原则

注:根据业务场景来进行选择,如果不经常被用于查询,可以选择 int

  1. 使用 int 来存储时间字段的优缺点

优点:字段长度比 datetime 小

缺点:使用时要进行函数转换,只能存储到 2038-1-19 11:14:07,即 2^32

  1. 需要存储的时间粒度:年 月 日 时 分 秒 周

5. 如何选择主键

  1. 区分业务主键与数据库主键

业务主键用于标识业务数据,进行表与表之间的关联;
数据库主键为了优化数据存储(Innodb会生成6个字节的隐含主键)

  1. 根据数据库的类型,考虑主键是否要顺序增长

有些数据库是按主键的顺序逻辑存储的

  1. 主键的字段类型所占空间要尽可能的小

对于使用聚集索引方式存储的表,每个索引都会附加主键信息。

6. 避免使用外键约束

建议外键约束时,虽然可以保护数据的完整性,但数据写入时,会去检测是否符合外键约束,增加了开销。

  1. 降低数据导入的效率;
  2. 增加维护成本;
  3. 虽然不建议使用外键约束,但是相关联的列上一定要建立索引

7. 避免使用触发器

  1. 降低数据导入的效率;
  2. 可能会出现意想不到的数据异常;
  3. 使业务逻辑变的复杂。

8. 严禁使用预留字段

  1. 无法准确的知道预留字段的类型;
  2. 无法准确的知道预留字段中所存储的内容;
  3. 后期维护预留字段所要的成本,同增加一个字段所需要的成本是相同的。

9. 反范式化

为了性能和读取效率的考虑而适当对第三范式的要求进行违反,用空间换时间。

10. 维护和优化

10.1 维护数据字典

  1. 使用第三方工具对数据字典进行维护,根据数据库选择相应的数据库;
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='customer'
  1. 利用数据库本身的备注字段来维护数据字典;

  2. 导出数据字典。

10.2. 维护索引

  1. 出现在 Where 从名,group by 从名,order by 从句中的列;

  2. 可选择性高的列要放到索引的前面;

  3. 索引中不要包括太长的数据类型。

注意事项

  1. 索引并不是越多越好,过多的索引会降低读写效率;

  2. 定期维护索引碎片;

  3. 在 SQL 语句中不要使用强制索引关键字。

10.3 维护表结构

  1. 使用在线变更表结构的工具;
  2. 同时对数据字典进行维护;
  3. 控制表的宽度和大小。

数据库适合的操作

  1. 批量操作 VS 逐条操作;
  2. 禁止使用 select * 这样的查询;
  3. 控制使用用户自定义函数;
  4. 不要使用数据库中的全文索引。

10.4 在适当的时候对表进行水平拆分或垂直拆分

垂直拆分:控制表的宽度

  1. 经常一起查询的列放到一起;
  2. text,blob 等大字段拆分出到附加表中。

水平拆分:控制表的大小

把一张表的数据拆分成多张表来存储。

相关文章

  • 阿里数据库开发规范:谁还敢说你的数据库设计的“烂”

    数据库设计几个规范: 数据库命名规范、数据库基本设计规范、数据库索引设计规范、数据库字段设计规范、数据库SQL开发...

  • 数据库设计

    第六章 数据库设计 学习重点: 数据库设计的基本步骤; 数据库设计各阶段的具体设计内容; 数据库设计各阶段的设计描...

  • 规范化数据库设计

    规范化数据库设计 为什么需要数据库设计 当数据库比较复杂时我们需要设计数据库 糟糕的数据库设计 : 数据冗余,存储...

  • MySQL 入门(四)

    九、规范化数据库设计 1. 为什么需要数据库设计 当数据库比较复杂时,需要设计数据库; 糟糕的数据库设计:数据冗余...

  • 计算机二级java程序语言设计

    公共基础 数据库 数据库设计过程主要包括需求分析、概要结构设计、逻辑结构分析、数据库物理设计、数据库实施、数据库运...

  • 商城表结构设计

    (一)购物商城数据库设计-前期准备 (二)购物商城数据库设计-商品表设计 (三)购物商城数据库设计-商品表DDL(...

  • Mysql 规范

    Mysql 规范 数据库命名规范总结 数据库基本设计规范 索引设计规范 数据库字段设计规范 数据库SQL开发规范 ...

  • 数据库设计

    一、数据库设计概念 1. 数据库的生命周期 ①数据库分析与设计阶段包括需求分析、概念设计、逻辑设计和物理设计。②数...

  • 2018-04-19

    任务2.5 系统数据库设计 什么是数据库设计 数据库设计,是指根据用户需求,在某一具体的数据库管理系统上,设计数据...

  • Power Designer—数据库设计步骤

    数据库设计步骤 需求分析 — 概念结构设计 — 逻辑结构设计 — 物理结构设计 — 数据库的建立和测试 — 数据库...

网友评论

      本文标题:数据库设计

      本文链接:https://www.haomeiwen.com/subject/yitebftx.html