如何依据特定需求制作火车票预订场景的ERD
火车票预订场景ERD制作步骤
步骤1:从需求中提取独立实体
先把需求里所有独立存在的名词拎出来,不要把属性错当成实体,核心实体包括:
- 乘客(购票用户)
- 车次
- 座位
- 车票
- 车站
- 支付记录
步骤2:给每个实体补充属性并标记主键
每个实体必须设置唯一主键,主键用斜体标注,非空属性按需补充,示例如下:
- 乘客:用户ID、姓名、身份证号、手机号、注册时间
- 车次:车次编号、列车类型、出发站、到达站、出发时间、到达时间
- 座位:座位ID、所属车次编号、车厢号、座位号、座位等级
- 车票:车票ID、关联用户ID、关联座位ID、乘车人姓名、乘车人身份证号、车票状态
- 车站:车站ID、车站名称、所在城市、车站等级
- 支付记录:支付ID、关联车票ID、支付金额、支付时间、支付渠道、支付状态
步骤3:梳理实体间的关联关系,确定 cardinality
根据需求规则确定关系类型,用crowfoot表示法时直接在线段两端标注对应符号,用chen表示法时用菱形标注关系名:
- 乘客 ↔ 车票:一对多,一个乘客可购买多张车票,一张车票仅归属一个购票乘客
- 车次 ↔ 座位:一对多,一个车次对应多个固定座位,一个座位仅归属一个车次
- 车票 ↔ 座位:一对一,一张车票对应唯一指定车次的座位,一个座位在对应车次的售票周期内仅能被一张车票绑定
- 车次 ↔ 车站:多对多,一个车次会经过多个车站,一个车站会停靠多个车次,需新增中间关联实体经停站,补充属性:经停ID、关联车次编号、关联车站ID、到站时间、离站时间、停靠时长
- 车票 ↔ 支付记录:一对一,一张车票对应唯一支付记录,若需求支持多票合并支付可调整为一对多(一个支付记录对应多张车票)
步骤4:校验ERD合规性
- 检查所有多对多关系是否都设置了中间关联实体,禁止两个实体直接画多对多连线
- 检查弱实体是否标记正确:比如座位是依赖车次存在的弱实体,经停站是依赖车次和车站存在的弱实体,要按你使用的表示法规范标记
- 逐点对应需求规则校验:比如需求要求支持一个用户买多张同车次车票给同行人,就对应乘客和车票的一对多关系,同时车票需单独存储乘车人身份信息,不要直接复用乘客表的身份字段
内容的提问来源于stack exchange,提问作者Robby
相关产品推荐
相关产品推荐

