后端开发之数据库设计(二)物理设计

前面说到数据库的逻辑设计,始终是计划阶段,现在总是要将这些设计赋予实现,就是我现在要说的数据库物理的实现了,经过现在要说的,我们就能得到一个用于项目的数据库了。

物理设计

在数据库的物理设计中,最主要的自然是决定确定数据存储结构,在数据的存储时间和空间利用率中权衡,选择一个折中的方案,这个折中方案的选择必然是需要大量的经验作为选择的支持,但仍然有套路式的方案,理解并记住这些方案方便我们很快决定数据的存储结构等。按照物理设计的基本步骤,我们需要先选择合适的 DBMS 系统,因为不同的 DBMS 系统的数据类型稍微会有点区别,所以现决定 DBMS 系统是必须的。

选择 DBMS 系统
常见DBMS系统.png

以上是比较常见的 DBMS 系统,我们可以根据以下特点对 DBMS 系统进行选择。

  1. 选择选择商业数据库还是开源数据库,商业数据库需要考虑版权。
  2. 从性能方向考虑,oracle 性能比较高的,项目需要大的事务操作时可考虑,其他情况可选择其他数据库。
  3. 从我们使用的操作系统上,像是 SQLServer 是只支持在 window 下使用,其他数据库是可以运行在 linux、windows 下的。
  4. 从开发语言来看,如果选择的是 .net 语言的话,选择 SQLServer 会比较好一点,与 .net 配合比较好。
  5. 从应用场景来看,mysql 和 pgsql 这类开源数据库比较适合互联网项目,而 oracle 和 sqlserver 更常见于企业级项目。

由于现在接触比较多的还是互联网的项目,所以以下的例子使用 mysql 做介绍。

选择 MySQL 存储引擎

这里就贴一个图说明下各个存储引擎的特点,详细介绍可以看我分享的数据库学习视频。

mysql存储引擎.png

大部分情况下,我们都是选择 Innodb 这个存储引擎的。

定义数据库、表、字段的命名规范

为了在整个开发团队中明确数据库的定义,所以我们是需要定义命名规范的,有了命名规范,开发团队就能很快知道数据库是干嘛,数据库中的表的内容,每个字段表示什么含义,这和我们写代码用有意义的命名的目的是类似的。以下是表和字段的命名规则。

  1. 可读性原则:用有意义的单词作为字段名,可以用大小写区分开来,但由于在设置数据库的时候可以设置对大小写的敏感,所以用下划线区分开来比较合适
  2. 表意性原则:通过表的名称就能够知道表中存储的数据内容。
  3. 长名原则:尽量不使用缩写命名,因为有歧义。
选择合适的字段类型

选择合适的字段类型是在物理设计中最主要的一个工作,但这个选择其实没有类似于设计范式那样这么规范的规定,同一个字段可以选择不同的字段类型去存储,这里提供一个原则。

当一个列可以选择多种数据类型时,优先选择数字类型,其次是日期或二进制类型,最后字符型,对于同级别的数据类型来看,优先选择占用空间小的数据类型。

选择合适的字段类型面试的时候经常被问道,下面举一些常问的例子:

  • varchar 和 char 类型的选择
    1. 如果列中要存储的数据长度差不多是一致的,则应该考虑用 char;否则应该考虑用 varchar。
    2. 如果列中的最大数据长度小于 50Byte ,则一般也考虑用 char(当然,如果这个列很少用,则基于节省空间和减少 I/O 的考虑,还是可以选择用 varchar)
    3. 一般不宜定义大于 50Byte 的 char 类型列。
  • 日期类型存储
    datetime 类型:存储时原样输入输出,和时区无关。占8字节存储空间。
    timestamp 类型:把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。占4字节空间。
    date 类型:只有日期,例如生日,可以直接利用时间函数进行时间的计算。占3字节空间。

    注意不要使用字符串类型来存储日期时间数据,使用 int 存储日期时间不如使用 timestamp 类型

  • decimal 与 float 类型选择
    1. decimal 用于存储精确数据,而 float 只能用于存储非精确数据,故精确数据只能选择用 decimal 类型
    2. 由于 float 的存储空间开销一般比 decimal 小(精确到7位小数只需要4个字节,而精确到15位小数只需要8字节)故非精确数据优先选择 float 类型
其他注意事项
  • 选择主键:考虑主键是否要顺序增长,所占空间要尽可能小。
  • 避免使用外键约束:会降低数据导入的效率,增加维护成本。
  • 避免使用触发器:会降低数据导入的效率,可能会出现意想不到的数据异常。
  • 不需要预留字段
反范式设计

前面我们在逻辑设计的时候说到了设计范式,我们遵循设计范式,设计出完全没有冗余数据的数据表,而反范式化就是通过增加冗余数据,减少表的关联,即是我们说的空间换时间。
对于反范式的设计是没有什么原则或者规范的,可以选择对关联表之后只为了查多一个字段的数据进行反范式设计,这个是比较依靠经验的。

这就是数据库物理设计的内容,物理设计对数据库的查询效率乃至系统的性能是十分重要的,当我们的系统使用人数或者并发达到一定的数量级就不能简单的按照设计范式去做数据库设计,物理设计本身就是时间、空间的权衡,是没有绝对的设计规则的,大家初期可以按照我上面提出的方法做。

现在关注我的公众号,后台回复【数据库】可以获取《打造扛得住的MySQL数据库架构》视频学习资料一份,欢迎大家关注!


欢迎关注微信公众号 乱点技能树的小猿
日常发布初出茅庐程序员一些胡言乱语以及编程资源,漫漫编程路,希望我们一起进步!

欢迎关注.jpg

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • 第三章 数据库系统 3.1 数据库管理系统的类型 通常有多个分类标准。如按数据模型分类、按用户数分类、按数据库分布...
    步积阅读 2,679评论 0 7
  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,698评论 0 44
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,182评论 0 9
  • 1、引言 数据库设计过程中表、字段等的命名规范也算是设计规范的一部分,不过设计规范更多的是为了确保数据库设计的合理...
    SnowflakeCloud阅读 40,951评论 0 48
  • 数据库设计,一个软件项目成功的基石。很多从业人员都认为,数据库设计其实不那么重要。现实中的情景也相当雷同,开发人员...
    wwmin_阅读 1,111评论 0 52