最近在看《Database modeling & design:logical design》一书,其中有一道练习题是对简单租车系统进行数据库逻辑设计并画出ER图。
这道题给我挺多遐想的,所以我在这里把这些想法记录下来,也试着设计一把。
要进行数据库设计,首先要对需求进行分析。需求分析一般会需要对业务人员进行随访,收集信息。我没办法进行随访,就通过自己的遐想来假设需求场景(可能会有错误与遗漏)。
最初想到的:
1. 租车公司有多个租车门店,分布于多个不同的地区,并有各自的租车电话。
2. 每个租车门店有多辆汽车可供租赁。
3. 供租赁的车辆需要登记车辆识别代号(VIN),购入时间,所属门店,车辆型号,车辆状态(可租Ready,维修中Repair,租出Inuse,无效Inactive)
4. 车辆的租用费用基本由车辆型号和日期类型(平日,周末,还是节假日)来决定。
5. 顾客在订车前需先进行注册,包括姓名,身份证号,驾照号,性别,手机号,固定电话,家庭住址,Email。
6. 注册顾客可通过系统下租车单,预约某车型,若干天的租赁(预约期最远为6个月)。
7. 租车单需记录顾客编号,车辆编号,租赁起始日期,租赁结束日期,提车门店,还车门店,租赁费用,预付款金额,订单状态(输入Entered,提交Booked,预约Reserved,使用中Inuse,交还Returned,取消Cancelled)。注:暂不提供送车上门和上门取车服务。
对于上述需求,比较明显的需创建的表有:车辆(Table_Car),门店(Table_Store),顾客(Table_Customer),订单(Table_Order)。
除此之外,车辆型号,车辆状态,日期类型和订单状态分别创建成四张枚举表Table_CarCategory,Table_CarStatus,Table_DateType,Table_OrderStatus。
还应有一张租车价位对照表(Table_BasePrice),其中会包含两个外键分别指向Table_CarCategory,Table_DateType。
简单表关系图如下: