如何用ERD设计及基数约束实现汽车租赁公司的三项规则?
汽车租赁公司ERD设计方案(满足三项约束)
核心实体定义
- Car:存储车辆基础信息,主键为
CarID(唯一标识每辆车),属性可包含型号、牌照号、座位数等。 - Passenger:存储乘客信息,主键为
PassengerID(唯一标识每名乘客),属性可包含姓名、联系方式等。 - Rental:代表某辆车在特定日期的一次租赁记录,主键为复合键
(CarID, RentalDate)。这个复合主键直接实现规则1:同一车辆(CarID)在同一天(RentalDate)只能存在一条Rental记录,避免重复预订。 - PassengerRental:关联乘客与租赁记录的中间实体,主键为复合键
(PassengerID, RentalDate)。这个复合主键实现规则2:同一乘客(PassengerID)在同一天(RentalDate)只能关联一条Rental记录,即同一天不能乘坐多辆车。
实体间基数约束
- Car 与 Rental:1 对 0..N。一辆车可以有多次租赁记录(不同日期),但同一日期只能有一条(由Rental的复合主键保证)。
- Rental 与 PassengerRental:1 对 1..N。一次租赁(对应一辆车的某一天)可以关联多名乘客,直接满足规则3:一辆汽车可搭载多名乘客。同时,每个PassengerRental必须关联唯一的Rental。
- Passenger 与 PassengerRental:1 对 0..N。一名乘客可以有多次租赁关联,但同一日期只能关联一次(由PassengerRental的复合主键保证)。
设计逻辑说明
通过两个复合主键的关联实体,把车辆、乘客、租赁日期三者绑定:
- Rental实体锁定了“车辆-日期”的唯一组合,避免车辆重复预订;
- PassengerRental实体锁定了“乘客-日期”的唯一组合,避免乘客同一天坐多辆车;
- 而Rental与PassengerRental的一对多关系,自然支持一辆车搭载多名乘客的需求。
这种设计完全通过ERD的实体定义、主键约束(属于基数/唯一性约束范畴)来实现所有三项规则,不需要额外的业务逻辑校验。
内容的提问来源于stack exchange,提问作者Avan Tiwari
相关产品推荐
相关产品推荐

