汽车租赁系统数据库 E-R 图设计

文章目录


汽车租赁系统数据库 E-R 图设计

一、实体(Entities)

  1. 用户(User)

    • 属性
      • 用户 ID(UserId):唯一标识每个用户,通常为整数类型,自增长主键,用于区分不同用户。
      • 用户名(UserName):用户登录时使用的名称,字符串类型,有一定长度限制,且要求在系统内唯一。
      • 密码(Password):用于验证用户身份,加密存储的字符串类型,保障用户账户安全。
      • 姓名(RealName):用户的真实姓名,字符串类型,方便在租赁等业务中进行身份确认等操作。
      • 性别(Gender):可采用枚举类型(如男、女等)或者用特定代码表示性别信息,便于统计分析用户特征。
      • 身份证号(IDCardNumber):唯一标识用户身份的重要信息,字符串类型,具有严格的格式要求,用于实名认证等相关业务场景。
      • 联系电话(PhoneNumber):方便联系用户的手机号码或其他常用电话号码,字符串类型,符合电话号码格式规范。
      • 邮箱(Email):用户的电子邮箱地址,字符串类型,用于接收系统通知、找回密码等功能,格式需符合邮箱地址规范。
      • 注册时间(RegistrationTime):记录用户注册账号的具体时间,日期时间类型,可用于分析用户增长趋势等情况。
      • 用户角色 ID(RoleId):与"角色"实体关联,表明该用户所属的角色类别,整数类型,通过外键关联到"角色"表。
  2. 车辆(Car)

    • 属性
      • 车辆 ID(CarId):作为车辆的唯一标识符,整数类型,自增长主键,用于区分不同车辆个体。
      • 车牌号(LicensePlateNumber):车辆上路行驶的合法牌照号码,字符串类型,具有唯一性和特定格式要求,便于识别和管理车辆。
      • 车架号(VinNumber):车辆识别代码,是每辆车独一无二的编码,字符串类型,用于精准识别车辆,常用于车辆登记、维修、保险等诸多场景。
      • 发动机号(EngineNumber):发动机的唯一编号,字符串类型,用于车辆发动机相关的管理与追踪,如发动机维修、保养记录等。
      • 品牌(Brand):车辆的品牌名称,如大众、丰田等,字符串类型,便于用户按品牌筛选和了解车辆基本属性。
      • 型号(Model):车辆具体的型号规格,例如大众帕萨特 2023 款等,字符串类型,进一步细化车辆信息,方便用户查找符合自身需求的车辆。
      • 购置日期(PurchaseDate):车辆购买进入租赁系统的时间,日期类型,可用于计算车辆折旧、使用年限等情况,也有助于分析车辆的成本与收益关系。
      • 租赁价格(RentalPrice):每单位时间(如每天、每小时等,具体由业务规则确定)车辆的租赁费用,数值类型,根据车型、市场行情等因素设定,是计算订单金额的关键依据。
      • 车辆状态(CarStatus):采用枚举类型(如可租、已租、维修中、报废等)表示车辆当前所处的状态,便于系统实时掌握车辆能否用于租赁业务,以及进行相应的业务流程控制。
      • 车辆图片路径(ImagePath):存储车辆外观图片在服务器上的存储路径,字符串类型,方便用户在系统前端直观地查看车辆外观,辅助租赁决策。
  3. 订单(Order)

    • 属性
      • 订单 ID(OrderId):唯一标识每个租赁订单,整数类型,自增长主键,用于区分不同的租赁业务记录。
      • 用户 ID(UserId):与"用户"实体关联,表明是哪个用户提交的租赁订单,整数类型,通过外键指向"用户"表,建立一对多的关联关系(一个用户可以有多个订单)。
      • 车辆 ID(CarId):与"车辆"实体相关联,确定该订单租赁的具体车辆,整数类型,通过外键指向"车辆"表,也是一对多的关系(一辆车可以被多次租赁产生多个订单)。
      • 租赁起止时间(RentalStartTime、RentalEndTime):分别记录租赁业务开始和结束的具体时间点,日期时间类型,是计算租赁时长、费用以及管理车辆租赁周期的重要依据。
      • 租赁天数(RentalDays):根据租赁起止时间计算得出的租赁时长天数,整数类型,可用于直观展示租赁周期给用户,同时参与费用计算等业务逻辑。
      • 取车地点(PickupLocation):用户约定提取租赁车辆的地点,字符串类型,明确租赁业务中车辆交接的起始位置,方便用户和商家安排相关事宜。
      • 还车地点(ReturnLocation):租赁结束后用户归还车辆的地点,字符串类型,与取车地点类似,用于规范还车流程以及计算可能涉及的异地还车费用等情况。
      • 订单状态(OrderStatus):通过枚举类型(如待审核、已确认、已拒绝、已完成等)来表示订单当前所处的业务处理阶段,便于系统和相关人员对订单进行跟踪和操作。
      • 订单金额(OrderAmount):该租赁订单需要支付的总费用,数值类型,根据租赁价格、租赁天数以及可能的其他费用(如超时费、保险费等,如有相关业务规则)计算得出,是订单的重要财务属性。
      • 下单时间(OrderTime):记录用户提交租赁订单的具体时间,日期时间类型,可用于分析订单生成的规律、高峰期等情况,辅助运营管理。
  4. 角色(Role)

    • 属性
      • 角色 ID(RoleId):唯一标识不同的角色类别,整数类型,自增长主键,用于区分系统内不同权限的角色群体,如系统管理员、商家管理员、普通用户等。
      • 角色名称(RoleName):角色的具体名称,例如"系统管理员""商家管理员""普通用户"等,字符串类型,便于直观理解角色的定位和权限范围。
      • 角色描述(RoleDescription):对该角色在系统中所能执行的操作、拥有的权限等进行详细文字描述,字符串类型,帮助管理人员清晰界定不同角色的职责边界。
  5. 权限(Permission)

    • 属性
      • 权限 ID(PermissionId):唯一标识每个具体的权限项,整数类型,自增长主键,用于区分系统内各种各样的操作权限,如用户添加权限、车辆删除权限等。
      • 权限名称(PermissionName):直观展示该权限对应的具体操作名称,例如"查看用户信息""修改车辆价格"等,字符串类型,便于配置和管理权限。
      • 权限描述(PermissionDescription):详细说明该权限允许执行的具体行为以及作用范围等内容,字符串类型,辅助明确权限的具体内涵和使用场景。
      • 角色 ID(RoleId):与"角色"实体关联,表明该权限属于哪个角色,整数类型,通过外键关联到"角色"表,建立多对一的关系(多个权限可以归属一个角色),以此确定不同角色所拥有的权限集合。
  6. 库存(Inventory)

    • 属性
      • 库存 ID(InventoryId):唯一标识每个库存记录,整数类型,自增长主键,用于区分不同的车辆库存条目。
      • 车辆 ID(CarId):与"车辆"实体关联,明确是针对哪辆车的库存记录,整数类型,通过外键指向"车辆"表,确保库存信息与具体车辆相对应。
      • 库存数量(InventoryQuantity):记录当前该车辆可供租赁的数量,整数类型,用于实时监控车辆的可租余量,便于进行车辆调配、库存盘点等操作,避免超租等情况发生。

二、实体间关系(Relationships)

  1. 用户与角色(User - Role)

    • 关系类型:多对一(Many-to-One)
    • 描述:多个用户可以属于同一个角色类别,例如多个普通用户都具有"普通用户"这一角色所定义的权限范围。通过在"用户"表中的"用户角色 ID(RoleId)"字段作为外键,关联到"角色"表的"角色 ID(RoleId)"字段来体现这种关系,从而实现根据用户所属角色来赋予相应权限、控制其在系统中的操作范围等功能。
  2. 用户与订单(User - Order)

    • 关系类型:一对多(One-to-Many)
    • 描述:一个用户可以提交多个租赁订单,例如一个经常租车的用户在不同时间可能有多个租车需求并产生相应订单。在"订单"表中的"用户 ID(UserId)"字段作为外键,关联到"用户"表的"用户 ID(UserId)"字段,以此表示这种一对多的关系,便于查询某个用户的所有租赁订单情况,以及从订单信息回溯到下单用户等业务操作。
  3. 车辆与订单(Car - Order)

    • 关系类型:一对多(One-to-Many)
    • 描述:一辆车可以在不同时间段被多次租赁,从而产生多个不同的租赁订单。通过在"订单"表中的"车辆 ID(CarId)"字段作为外键,关联到"车辆"表的"车辆 ID(CarId)"字段来体现这种关系,方便追踪某辆车的租赁历史、当前及未来的租赁安排等,同时基于此关系可以在订单处理过程中确保车辆状态的正确更新以及避免重复租赁等问题。
  4. 角色与权限(Role - Permission)

    • 关系类型:一对多(One-to-Many)
    • 描述:一个角色可以拥有多个不同的操作权限,例如"系统管理员"角色可能拥有添加用户、修改系统参数、查看所有订单等多个权限。在"权限"表中的"角色 ID(RoleId)"字段作为外键,关联到"角色"表的"角色 ID(RoleId)"字段,以此构建一对多的关系,用于系统进行权限管理,明确不同角色能够执行的具体操作集合,保障系统的安全性和数据的合规访问。
  5. 车辆与库存(Car - Inventory)

    • 关系类型:一对一(One-to-One)或一对多(One-to-Many),具体取决于业务场景和库存管理精细程度。
    • 描述:如果库存管理是针对每辆车单独详细记录,一辆车对应一个库存记录,就是一对一关系;若存在同一辆车在不同地点、不同仓库等有多个库存条目情况,则为一对多关系。通过在"库存"表中的"车辆 ID(CarId)"字段作为外键,关联到"车辆"表的"车辆 ID(CarId)"字段来体现这种关系,有助于实时掌握车辆的可租数量,合理调配车辆资源,进行库存盘点等相关业务活动。

三、数据表(Tables)

实体对应的表结构设计:

用户表(User)

字段名称 数据类型 是否为空 备注
UserId INT AUTO_INCREMENT 用户 ID,主键,自增长
UserName VARCHAR(50) 用户名,唯一且非空
Password VARCHAR(255) 密码,加密存储
RealName VARCHAR(50) 真实姓名
Gender ENUM('男', '女') 性别
IDCardNumber VARCHAR(18) 身份证号,唯一且格式固定
PhoneNumber VARCHAR(20) 联系电话
Email VARCHAR(100) 电子邮箱地址
RegistrationTime DATETIME 注册时间
RoleId INT 外键,关联 Role 表的 RoleId,表明用户角色

车辆表(Car)

字段名称 数据类型 是否为空 备注
CarId INT AUTO_INCREMENT 车辆 ID,主键,自增长
LicensePlateNumber VARCHAR(20) 车牌号,唯一且格式固定
VinNumber VARCHAR(17) 车架号,唯一且格式固定
EngineNumber VARCHAR(50) 发动机号
Brand VARCHAR(50) 品牌
Model VARCHAR(50) 型号
PurchaseDate DATE 购置日期
RentalPrice DECIMAL(10, 2) 租赁价格
CarStatus ENUM('可租', '已租', '维修中', '报废') 车辆状态
ImagePath VARCHAR(255) 车辆图片路径

订单表(Order)

字段名称 数据类型 是否为空 备注
OrderId INT AUTO_INCREMENT 订单 ID,主键,自增长
UserId INT 外键,关联 User 表的 UserId,表明下单用户
CarId INT 外键,关联 Car 表的 CarId,表明租赁车辆
RentalStartTime DATETIME 租赁开始时间
RentalEndTime DATETIME 租赁结束时间
RentalDays INT 租赁天数
PickupLocation VARCHAR(100) 取车地点
ReturnLocation VARCHAR(100) 还车地点
OrderStatus ENUM('待审核', '已确认', '已拒绝', '已完成') 订单状态
OrderAmount DECIMAL(10, 2) 订单金额
OrderTime DATETIME 下单时间

角色表(Role)

字段名称 数据类型 是否为空 备注
RoleId INT AUTO_INCREMENT 角色 ID,主键,自增长
RoleName VARCHAR(50) 角色名称
RoleDescription VARCHAR(255) 角色描述

权限表(Permission)

字段名称 数据类型 是否为空 备注
PermissionId INT AUTO_INCREMENT 权限 ID,主键,自增长
PermissionName VARCHAR(50) 权限名称
PermissionDescription VARCHAR(255) 权限描述
RoleId INT 外键,关联 Role 表的 RoleId,表明所属角色

库存表(Inventory)

字段名称 数据类型 是否为空 备注
InventoryId INT AUTO_INCREMENT 库存 ID,主键,自增长
CarId INT 外键,关联 Car 表的 CarId,表明对应的车辆
InventoryQuantity INT 库存数量
相关推荐
唐可盐2 小时前
如何进行mysql慢查询日志设置以及日志管理与分析
运维·数据库·mysql
李宥小哥2 小时前
ElasticSearch04-高级操作
数据库·microsoft
白云如幻3 小时前
MySQL数据表的管理
数据库·mysql
上辈子杀猪这辈子学IT3 小时前
【Hive数据仓库】Hive部署、Hive数据库操作(增删改查)、表操作(内部表、外部表、分区表、桶表)
大数据·数据库·数据仓库·hive·hadoop
web安全工具库3 小时前
探索 Python 中的字典:序列解包与复杂数据结构
前端·数据库·python
万能的编程语言4 小时前
ORACLE逗号分隔的字符串字段,关联表查询
数据库·oracle
33三 三like4 小时前
数据库基础知识点(选填/问答题)
数据库·oracle
jjw_zyfx4 小时前
Django结合websocket实现分组的多人聊天
数据库·websocket·django
不会编程的猫星人4 小时前
oracle控制文件发生变化的情况
数据库·oracle