孤尽班第四天--数据模型设计总结
与框架设计一样,数据模型设计也应该从分析用户需求着手。所以首先应该采访用户,把用户的非结构化的需求表述逐一罗列下来。比如,如果我们要构建一个12306购票系统的数据模型,我们差不多会收集到以下这么一些需求。
- 乘客通过网站注册登录。
- 实名认证
- 铁路部门管理员有如下功能:
- 车次、车厢、经停站、时刻表的增删改查
- 用户管理:用户增删改查,黑名单管理,为用户分配角色
- 角色管理:角色增删改查,为角色分配相应的功能
- 定时任务:生成火车票
- 普通用户有如下功能:
- 修改信息:密码、住址、电话、邮箱等
- 代购功能:录入其他乘客信息,合并下单支付
- 余票查询:可以通过车次、出发站、到达站、日期等条件查询
- 购买车票下单:选择车次,选择乘车人,座位类型后下单
- 订单支付:第三方支付,支付宝支付、微信支付
- 支付成功后系统通知用户
有了用户需求,下一步就可以进行实体和关系的提炼了。在分析用户需求时,应该特别注意其中的名词和动词,一般一个名词就是一个实体或者字段名,一个动词就代表着一个关系或者数据库应该支持的功能。我把上面需求中的与我们业务相关的名词标为红色,动词标为蓝色。
通过提炼名词和动词,就可以得到以下的实体,以及实体间的关系。
实体
用户:姓名、住址、电话、邮箱、密码
管理员:姓名,电话,邮箱,密码
角色:角色名称,角色备注
用户角色:用户姓名,角色名称
黑名单:用户姓名,有效期
车次:车次号,出发站,终点站,出发时间,到达时间
车厢:车厢号
座位:座位号,座位类型,售价
经停站:站名
行车区间:车次号,出发站,终点站,出发时间,到达时间
时刻表:车次号,出发站,终点站,出发时间,到达时间
(注意,行车区间和时刻表其实是一回事,可以用一个表来表示)
火车票:车次号,出发时间,到达时间,起始站,终点站,座位类型,剩余数量,售价
订单:订单号,购买人,乘车人,购买方式,订单状态
关系
车次 包含 车厢(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怎么建表
孤尽班第四天--数据模型设计总结相关推荐
- 《孤尽班T31-01-架构理论笔记》
孤尽,阿里巴巴技术大拿,开课吧CTO 当初得知孤尽大大会组建一个"Java学习班"的 时候,就期待能够加入其中,学一些"够牛B"的技术,从最开始的差不多600人 ...
- Django+Vue开发生鲜电商平台之3.数据模型设计和资源导入
文章目录 一.项目初始化 二.数据模型设计 1.用户数据模型设计 2.商品数据模型设计 3.交易数据模型设计 4.用户操作数据模型设计 三.xadmin后台管理系统的配置 四.数据迁移和数据导入 1. ...
- 详解数据模型设计方法
如果把指标⽐喻成⼀棵树上的果实,那模型就是这棵⼤树的躯⼲,想让果实结得好,必须让树⼲变得粗壮.真实场景举例: ⼤多数公司的分析师会结合业务做⼀些数据分析(需要⽤到⼤量的数据),通过报表的⽅式服务于业务 ...
- AI产品经理数据模型设计文档(简版)
http://www.woshipm.com/ai/2019675.html 目前数据.算法.AI产品经理岗位十分热门,本文写给想要入行这方面的新人们,带大家一起了解一下什么是数据模型设计文档. 有一 ...
- Neo4j数据模型设计
摘要: 数据模型设计是数据建模的第一步,因为Neo4j不需要模式结构定义,所以使用简单框图就可以为一个项目或应用设计数据模型.创建数据模型之后,就可以使用SDN进行数据实体建模和一些数据访问的设计. ...
- 关于数据模型设计和落地的一篇罕见干货
关于数据模型设计和落地的一篇罕见干货 大数据技术的奥秘--数据模型 大数据时代,各大企业和政府机构都在热火朝天的进行着数据方面的建设,数据开始在组织中成为一种文化.反映在日常就是无论担任何种角色,几乎 ...
- 福州印发四部数据资源相关管理办法,包括全国首部地级市数据开放管理办法...
▼金猿奖·2019年度征集评选▼ 大数据产业创新服务媒体 --聚焦数据 · 改变商业 近日,<福州市政务数据资源管理办法><福州市政务数据汇聚共享管理暂行办法><福州市政 ...
- mongodb数据模型设计
文章目录 mongodb数据模型设计 一.基础:关系模型和文档模型 二.数据模型设计 数据模型设计的基础 数据模型设计 三.MongoDB文档模型设计的三个误区 四.如何考虑MongoDB 文档模式设 ...
- 领域建模之数据模型设计方法论
本文通过实际业务需求场景建模案例,为读者提供一种业务模型向数据模型设计的方法论,用于指导实际开发中如何进行业务模型向数据模型转化抽象,并对设计的数据模型可用性.扩展性提供了建议性思考.通过文章,读者可 ...
- 《孤尽班T31-05-技术架构选型笔记》
<孤尽班T31-05-技术架构选型笔记> T31项目 文章目录 <孤尽班T31-05-技术架构选型笔记> 1. 关于技术选型 1.1 为什么要啊进行技术选型? 1.2 微服务架 ...
最新文章
- 用Delphi设计能携带附件的EMail
- 获取授时时间_gps时间同步服务器在通信行业的解决方案
- docker安装Jenkins:查看安装版本信息
- 详述白盒测试的逻辑覆盖法的条件判定覆盖及其优缺点
- maven 引入war
- 【AI视野·今日NLP 自然语言处理论文速览 第十一期】Mon, 21 Jun 2021
- 富文本框让最大四百像素_富文本框的使用
- nvarchar(max)和表扫描
- mysql ibatis 批量插入_ibatis 批量插入逻辑
- 【彩色图像直方图统计】matlab统计RGB、HSV、Lab图像灰度,以直方图形式显示
- UVC app流程图
- 高等代数 多项式环(第7章)5* 结式与域
- 二本学生四年的求职经历
- 如何将一个数字转换为字符串并且按照指定格式显示?--TO_CHAR
- 得到平面设计师进阶之路
- 【源码】程序员优质资源汇总
- CASdatasets
- 读《一个聪明的投资者 本杰明 - 格雷厄姆》
- Qt的paint函数重写,以及QPaint给一条线绘制箭头
- 宾夕法尼亚大学计算机专业研究生,宾夕法尼亚大学UPenn计算机科学Computer Science专业排名第32位(2021年THE世界大学商科排名)...