​作为一个后端开发者,数据库设计是我们避不开的课题,不管是面试的时候,还是在真实工作的情境下,我们的工作不仅仅是将代码开发出来,根据开发的项目,设计出支撑项目的数据库,也是一个合格的开发者所应该具备的技能之一,这里我将数据库设计分成几个重要的部分,以下是我做数据库设计时的步骤。

数据库设计步骤

需求分析

需求分析相信大家都知道,我们在做开发之前先做需求分析,能让我们的开发更加顺畅,它是我们开发的指南针,好的需求分析能让我们明确开发的需求,避开不需要做的功能需求,减少不必要的时间,而在数据库设计当中,需求分析也同样重要,当然它不需要结成像是需求文档一样的东西,首先要搞清楚为什么要做需求分析。

  1. 需要存储哪些数据。
  2. 数据的特点,其中最重要的就是数据的时效性,在项目不断壮大的情况下,我们存储的数据会越来越多,这些数据是否能够清理,还是应该归档,这都是在确定数据时效性之后才明确的。
  3. 数据的生命周期。这个和数据的特点有些类似,像是增长快、量大、但又非必要的数据,我们可以考虑是否选择将这样的数据存入数据库,如果一定要存数据库,也可以提早确定分表的规则或者是清理的规则,如果等到数据变得十分庞大后再去考虑这些问题会影响到业务的正常进行,这些事情在需求分析就能确定下来是最好不过的。

而经过需求分析,我们也有需要搞清楚的事情,这也是需求分析的目的。首先是项目会涉及到的实体,像是在一个电商项目中,商品就是其中一个实体,一般情况下,我们可以将一个实体设计成一个表,当然这个不是一定的,需要根据实际情况设计。其次,也是我认为十分重要的一个步骤,即确定实体之间的关系,也就是我们常说的一对一,一对多以及多对多。只要确定了这个关系,我认为就能设计出一个业务逻辑上不会出错的数据库。

通常情况下,一对一的表将其中一个表的主键作为另一个表的外键,一对多的情况将“一”对应的那个表的主键作为“多”的那个表的主键,多对多的情况就设计一个关联表,将两表的主键存在关联表中做关联关系,这个方法在大部分项目中都能够直接使用,很大程度上减少我设计数据库的时间,如果时间紧急,可以采取这种方式设计后再做验证,时间充足的化还是希望大家按照一定的规范设计数据库。

最后,确定实体的属性,像是商品这个实体中,有商品名,价格等属性。

逻辑设计

以上就是需求分析应该做的事情,分析之后,就是做设计了,这里涉及到的内容就比较理论化,但是前人为我们总结了设计的规范,让我们可以比较简单的做逻辑设计。其中使用到的工具就是 ER 图。

er图

ER 图由矩形、菱形、椭圆形和线段组成,使我们可以将需求分析出来的实体、属性、实体间的关系由图体现出来,让人更加方便看懂理解。

将 ER 图画出来后,就是使用设计范式去做更详细的设计了。范式是关系型数据库的理论基础,是我们在设计数据库结构过程中所要遵循的规则和指导方法,经过设计范式的指导设计,我们就可以得到一个十分完善,逻辑清晰的数据库设计了。其中,我们主要遵循第一范式、第二范式、第三范式和BC范式,各种范式呈递次规范,越高的范式数据库冗余越小,即满足第三范式则一定满足第一第二范式,满足第二范式一定满足第一范式。

第一范式:确定表中的每一个字段都不能再分。下面这张图就是违反了第一范式,因为其中的用户信息字段还可以再分。

第一范式

第二范式:一个表是复合主键时(多个键组成唯一识别),其中一个候选关键字存在决定非关键字的情况时,就不符合第二范式了,如下图。

第二范式

所以,如果是非复合主键则一定符合第二范式。

第三范式:不能存在传递函数关系。

第三范式

如上图,商品名称和分类在同一表内,但分类又可以决定分类描述,这就是传递函数关系,这时候,将分类和分类关系拆出来放到另一个表就可以达成第三范式了。

第三范式完善

以上就是数据库需求分析和逻辑设计的内容,这里比较偏向理论,好好的理解这些方法和设计范式就能设计出项目对应的数据库,能让我们如善应对工作中需要做的数据库设计相关的工作了,希望这篇文章能给大家带来帮助,下一篇文章会讲到物理设计和数据库维护相关的内容,因为一个数据库设计仅仅是满足于业务逻辑是不够的,随着业务的壮大,合理的物理设计和维护十分必要。这里给关注公众号的读者一个小小的资源,请在后台回复【数据库】获取。


日常发布初出茅庐程序员一些胡言乱语以及编程资源,漫漫编程路,希望我们一起进步!

数据库设计_数据库设计(一)分析及逻辑设计相关推荐

  1. 原子设计_您需要了解的有关原子设计的4件事

    原子设计 重点 (Top highlight) Industries such as Architecture or Industrial Design have developed smart mo ...

  2. SAP库存--历史库存相关数据,以及库存变化对应表的数据变化,可以用于库龄分析报表逻辑设计。

    ** 库龄分析 # 在后勤模块经常会用到库存相关的数据进行报表展示以及其他数据分析,这个就需要对于SAP库存值变化以及相关表的数据更新有一定的了解. SAP历史库存相关数据,以及库存变化对应表的数据变 ...

  3. book电子书数据库设计_如何为杀手book的封面设计写出完美的摘要

    book电子书数据库设计 逐步出版真正的假人 (BOOK PUBLISHING STEP BY STEP FOR REAL DUMMIES) I have spent 18 years in adve ...

  4. mysql一对多如何设计_数据库在一对一、一对多、多对多怎么设计表关系

    1.一对一可以两个实体设计在一个数据库中l例如设计一个夫妻表,里面放丈夫和妻子 2.一对多可以建两张表,将一这一方的主键作为多那一方的外键,例如一个学生表可以加一个字段指向班级(班级与学生一对多的关系 ...

  5. 医院管理系统mysql课程设计_数据库(课程设计)报告(医院管理系统).doc

    数据库(课程设计)报告(医院管理系统) 数据库课程设计 报告模版 齐齐哈尔大学 数据库课程设计报告 题目: 班级: 姓名: 学号: 指导教师: 2013 医院信息管理系统 摘要:医院作为一个极其重要的 ...

  6. 财务数据mysql库设计_数据库设计规范 - MySQL

    数据库设计规范 表达是与否概念的字段,必须使用 is_xxx的方式命名,数据类型是 unsigned tinyint( 1表示是,0表示否) 任何字段如果为非负数,必须是 unsigned. 表名.字 ...

  7. 元组可以直接添加进数据库吗_数据库篇-第一章:数据库基本概念

    面试必备基础数据库知识,扫码关注公众号提升 01 第一,什么是数据库? 维基百科上是这样定义的: 所谓"数据库"是以一定方式储存在一起.能予多个用户共享.具有尽可能小的冗余度.与应 ...

  8. 基于android的电子词典设计_基于Android的电子词典的设计

    本毕业设计课题主要分为两个模块:即英-汉查询模块和汉语查询模块.在此两模块都是使用的Sqlite数据库,且数据库为.db文件. 对于电子词典,自己会根据任务书下达的任务来一步一步完成,实现系统的设计与 ...

  9. 小型蘑菇定向切片机设计_鲜枣去核机的设计_玉米脱粒机的设计_振动式马铃薯收获机的设计_谷物干燥机的设计_锤片式饲料粉碎机的设计_山楂去核机的设计_萝卜切丝机设计_板栗去皮机设计_锤式破碎机设计……

    棉花打包机的设计[说明书(论文)+CAD+solidworks] 毕业设计_气动四自由度机械手结构设计(设计说明书+CAD图纸)    套类零件自动上下料机构 玉米脱粒机的设计(说明书+cad图纸+p ...

最新文章

  1. Linux下C++中可使用的3种Hook方法
  2. 高精度地图量产难,四维图新利用优势准备实现突破
  3. 集中配置管理工具puppet安装使用
  4. Java 静态内部类与非静态内部类【复习】
  5. Sklearn中的CV与KFold详解
  6. java setcharat,Java StringBuffer setCharAt()方法
  7. 第一篇 - 手把手教你理清EOS各种开发环境搭建来龙去脉
  8. HTML5 Placeholder实现input背景文字提示效果
  9. KlayGE的Virtual Texturing技术定名
  10. pcb天线和纯铜天线_如何简化天线设计?相控阵波束成形IC来助您
  11. 系统架构师学习笔记-面向对象方法
  12. 疯狂的html css,疯狂Html+CSS+JS 中JS总结
  13. linux下无mysql命令_linux下mysql命令
  14. 达观数据助力浙江大华构建企业级知识搜索共享平台,盘活沉淀数据
  15. ScaleAnimation和TranslateAnimation同时使用
  16. mysql 查询优化实验报告_数据库优化查询实验报告.docx
  17. Matplotlib之条形图绘制
  18. 算数操作符与移位操作符
  19. Remote Desktop Connection Manager
  20. Apache Curator客户端的使用

热门文章

  1. 在mount里看到哪个设备文件的一些笔记
  2. 博客屏蔽搜索引擎只是个笑话!!
  3. XEIM 飞鸽传书数据库说明
  4. 不想帮人家写一辈子程序就要看的一本书
  5. 第一课[编辑器设置-VC++6.0]
  6. 获取Windows 系统的内核变量
  7. 2019年最流行的七大编程语言:学习编程,你会选择哪一种语言呢?
  8. 编程学不来就去当产品经理,没那么简单!
  9. 打开储存在服务器的文件,云服务器储存文件
  10. ecs 对比 本地服务器_阿里云服务器双十一活动福利