与框架设计一样,数据模型设计也应该从分析用户需求着手。所以首先应该采访用户,把用户的非结构化的需求表述逐一罗列下来。比如,如果我们要构建一个12306购票系统的数据模型,我们差不多会收集到以下这么一些需求。

  1. 乘客通过网站注册登录。
  2. 实名认证
  3. 铁路部门管理员有如下功能:
    1. 车次、车厢、经停站、时刻表的增删改查
    2. 用户管理:用户增删改查,黑名单管理,为用户分配角色
    3. 角色管理:角色增删改查,为角色分配相应的功能
  4. 定时任务:生成火车票
  5. 普通用户有如下功能:
    1. 修改信息:密码、住址、电话、邮箱等
    2. 代购功能:录入其他乘客信息,合并下单支付
    3. 余票查询:可以通过车次、出发站、到达站、日期等条件查询
    4. 购买车票下单:选择车次,选择乘车人,座位类型后下单
    5. 订单支付:第三方支付,支付宝支付、微信支付
  6. 支付成功后系统通知用户

有了用户需求,下一步就可以进行实体和关系的提炼了。在分析用户需求时,应该特别注意其中的名词和动词,一般一个名词就是一个实体或者字段名,一个动词就代表着一个关系或者数据库应该支持的功能。我把上面需求中的与我们业务相关的名词标为红色,动词标为蓝色。

通过提炼名词和动词,就可以得到以下的实体,以及实体间的关系。

实体

用户:姓名、住址、电话、邮箱、密码

管理员:姓名,电话,邮箱,密码

角色:角色名称,角色备注

用户角色:用户姓名,角色名称

黑名单:用户姓名,有效期

车次:车次号,出发站,终点站,出发时间,到达时间

车厢:车厢号

座位:座位号,座位类型,售价

经停站:站名

行车区间:车次号,出发站,终点站,出发时间,到达时间

时刻表:车次号,出发站,终点站,出发时间,到达时间

注意,行车区间和时刻表其实是一回事,可以用一个表来表示

火车票:车次号,出发时间,到达时间,起始站,终点站,座位类型,剩余数量,售价

订单:订单号,购买人,乘车人,购买方式,订单状态

关系

车次 包含 车厢(1:N)

车厢 包含 座位 (1:N)

车次 经过 经停站 (N:N)

车次 包含 行车区间 (1:N)一个车次可以有多个行车区段,所以这里需要多加一个实体,行车区间

用户 下 订单 (1:N)

订单 扣取/放回 车票 (1:1) 这里假定一个订单对应购买一张车票

用户 拥有 角色 (N:N)

用户 进入 黑名单(1:1)

在确定好实体和实体间关系后,就可以画ER图了。这里是我画的一个草图,可能和上面的分析有出入。

画完ER图以后,我们可以再回到用户需求中,重新审视用户需要的各项功能,看看设计好的数据模型能否支持这些功能。

对于车次的增删改查:增加一个车次,会相应地增加一批车厢,再相应地增加一批行车区间,然后再增加一批座位。而这个座位不仅和车厢有关系,还和行车区间有关。因为同一车次,不同座位可以对应不同的行车区间。比如T31是杭州到北京,有的座位可以是卖给从杭州到北京的乘客,而有的可以是卖给杭州到苏州的乘客。所以座位和行车区间也有关系,但上面的分析缺失了这个关系,需要补上。

座位 对应 行车区间

座位对应行车区间:座位号,出发站,终点站,出发时间,(售价)

加上这个关系后,当增加车次时,在相应增加了车厢和行车区间后,再增加“座位对应行车区间”。到这里,再想想,其实可以把座位售价挪到“座位对应行车区间”来,这样在增加“座位对应行车区间”的条目后,不用再去座位那里更新售价,而是可以就地写入售价。这样在以后查询票价时也非常方便。那么这个表其实也可以叫做,票价。同时,还要相应地在火车票中插入该车次的各类车票。

用户购买火车票:用户首先查询时刻表(即行车区间),获得区间列表,然后通过与火车票关联获取座位类型、数量和售价。用户根据乘车人,出发时间,出发站,终点站,座位类型,售价下了购买一张火车票的订单,这时后台会去火车票表确认该类型的票是否还有,如有,减一,然后在订单表中插入一条新记录,其状态为未付款。如无,则回复用户,票已售完。在有的情况下,用户可以接下来支付,如果支付成功,订单状态改为付款成功。

以上两个功能看来是可以被我们设计的模型所支持的。其他的功能也可以用类似的推演方法类进行验证,并对数据模型进行相应的修改。这里,我们只关注了数据模型的逻辑上的可行性,但并没有关注它的其他非功能性的特性,比如并发性能等。

在完成了数据模型设计后,我们就可以着手构建物理模型,完成SQL建表语句。这里可以用PowerDesigner来进行物理模型的构建。这里分享一个PowerDesigner的使用手册。

PowerDesigner快速建表使用方法_飞扬晴雪的博客-CSDN博客_powerdesigner怎么建表

孤尽班第四天--数据模型设计总结相关推荐

  1. 《孤尽班T31-01-架构理论笔记》

    孤尽,阿里巴巴技术大拿,开课吧CTO 当初得知孤尽大大会组建一个"Java学习班"的 时候,就期待能够加入其中,学一些"够牛B"的技术,从最开始的差不多600人 ...

  2. Django+Vue开发生鲜电商平台之3.数据模型设计和资源导入

    文章目录 一.项目初始化 二.数据模型设计 1.用户数据模型设计 2.商品数据模型设计 3.交易数据模型设计 4.用户操作数据模型设计 三.xadmin后台管理系统的配置 四.数据迁移和数据导入 1. ...

  3. 详解数据模型设计方法

    如果把指标⽐喻成⼀棵树上的果实,那模型就是这棵⼤树的躯⼲,想让果实结得好,必须让树⼲变得粗壮.真实场景举例: ⼤多数公司的分析师会结合业务做⼀些数据分析(需要⽤到⼤量的数据),通过报表的⽅式服务于业务 ...

  4. AI产品经理数据模型设计文档(简版)

    http://www.woshipm.com/ai/2019675.html 目前数据.算法.AI产品经理岗位十分热门,本文写给想要入行这方面的新人们,带大家一起了解一下什么是数据模型设计文档. 有一 ...

  5. Neo4j数据模型设计

    摘要: 数据模型设计是数据建模的第一步,因为Neo4j不需要模式结构定义,所以使用简单框图就可以为一个项目或应用设计数据模型.创建数据模型之后,就可以使用SDN进行数据实体建模和一些数据访问的设计. ...

  6. 关于数据模型设计和落地的一篇罕见干货

    关于数据模型设计和落地的一篇罕见干货 大数据技术的奥秘--数据模型 大数据时代,各大企业和政府机构都在热火朝天的进行着数据方面的建设,数据开始在组织中成为一种文化.反映在日常就是无论担任何种角色,几乎 ...

  7. 福州印发四部数据资源相关管理办法,包括全国首部地级市数据开放管理办法...

    ▼金猿奖·2019年度征集评选▼ 大数据产业创新服务媒体 --聚焦数据 · 改变商业 近日,<福州市政务数据资源管理办法><福州市政务数据汇聚共享管理暂行办法><福州市政 ...

  8. mongodb数据模型设计

    文章目录 mongodb数据模型设计 一.基础:关系模型和文档模型 二.数据模型设计 数据模型设计的基础 数据模型设计 三.MongoDB文档模型设计的三个误区 四.如何考虑MongoDB 文档模式设 ...

  9. 领域建模之数据模型设计方法论

    本文通过实际业务需求场景建模案例,为读者提供一种业务模型向数据模型设计的方法论,用于指导实际开发中如何进行业务模型向数据模型转化抽象,并对设计的数据模型可用性.扩展性提供了建议性思考.通过文章,读者可 ...

  10. 《孤尽班T31-05-技术架构选型笔记》

    <孤尽班T31-05-技术架构选型笔记> T31项目 文章目录 <孤尽班T31-05-技术架构选型笔记> 1. 关于技术选型 1.1 为什么要啊进行技术选型? 1.2 微服务架 ...

最新文章

  1. 用Delphi设计能携带附件的EMail
  2. 获取授时时间_gps时间同步服务器在通信行业的解决方案
  3. docker安装Jenkins:查看安装版本信息
  4. 详述白盒测试的逻辑覆盖法的条件判定覆盖及其优缺点
  5. maven 引入war
  6. 【AI视野·今日NLP 自然语言处理论文速览 第十一期】Mon, 21 Jun 2021
  7. 富文本框让最大四百像素_富文本框的使用
  8. nvarchar(max)和表扫描
  9. mysql ibatis 批量插入_ibatis 批量插入逻辑
  10. 【彩色图像直方图统计】matlab统计RGB、HSV、Lab图像灰度,以直方图形式显示
  11. UVC app流程图
  12. 高等代数 多项式环(第7章)5* 结式与域
  13. 二本学生四年的求职经历
  14. 如何将一个数字转换为字符串并且按照指定格式显示?--TO_CHAR
  15. 得到平面设计师进阶之路
  16. 【源码】程序员优质资源汇总
  17. CASdatasets
  18. 读《一个聪明的投资者 本杰明 - 格雷厄姆》
  19. Qt的paint函数重写,以及QPaint给一条线绘制箭头
  20. 宾夕法尼亚大学计算机专业研究生,宾夕法尼亚大学UPenn计算机科学Computer Science专业排名第32位(2021年THE世界大学商科排名)...

热门文章

  1. DellR740制作Raid0
  2. [转载]矩阵求导运算规则
  3. 计算机用户名和初始密码,电脑默认的用户名和密码是多少
  4. 计算机Excel运行环境,Excel2007免费完整版 最新电脑版
  5. 最适合游戏的显卡排行榜,显卡天梯图
  6. hive根据出生日期算年龄-粗略版
  7. 移植u-boot到树莓派
  8. 数据挖掘基础学习笔记
  9. Centos7重置用户密码
  10. 配置一台新的kubuntu