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

news/2024/12/15 12:39:23/

文章目录


ER__3">汽车租赁系统数据库 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)

字段名称数据类型是否为空备注
UserIdINT AUTO_INCREMENT用户 ID,主键,自增长
UserNameVARCHAR(50)用户名,唯一且非空
PasswordVARCHAR(255)密码,加密存储
RealNameVARCHAR(50)真实姓名
GenderENUM(‘男’, ‘女’)性别
IDCardNumberVARCHAR(18)身份证号,唯一且格式固定
PhoneNumberVARCHAR(20)联系电话
EmailVARCHAR(100)电子邮箱地址
RegistrationTimeDATETIME注册时间
RoleIdINT外键,关联 Role 表的 RoleId,表明用户角色

车辆表(Car)

字段名称数据类型是否为空备注
CarIdINT AUTO_INCREMENT车辆 ID,主键,自增长
LicensePlateNumberVARCHAR(20)车牌号,唯一且格式固定
VinNumberVARCHAR(17)车架号,唯一且格式固定
EngineNumberVARCHAR(50)发动机号
BrandVARCHAR(50)品牌
ModelVARCHAR(50)型号
PurchaseDateDATE购置日期
RentalPriceDECIMAL(10, 2)租赁价格
CarStatusENUM(‘可租’, ‘已租’, ‘维修中’, ‘报废’)车辆状态
ImagePathVARCHAR(255)车辆图片路径

订单表(Order)

字段名称数据类型是否为空备注
OrderIdINT AUTO_INCREMENT订单 ID,主键,自增长
UserIdINT外键,关联 User 表的 UserId,表明下单用户
CarIdINT外键,关联 Car 表的 CarId,表明租赁车辆
RentalStartTimeDATETIME租赁开始时间
RentalEndTimeDATETIME租赁结束时间
RentalDaysINT租赁天数
PickupLocationVARCHAR(100)取车地点
ReturnLocationVARCHAR(100)还车地点
OrderStatusENUM(‘待审核’, ‘已确认’, ‘已拒绝’, ‘已完成’)订单状态
OrderAmountDECIMAL(10, 2)订单金额
OrderTimeDATETIME下单时间

角色表(Role)

字段名称数据类型是否为空备注
RoleIdINT AUTO_INCREMENT角色 ID,主键,自增长
RoleNameVARCHAR(50)角色名称
RoleDescriptionVARCHAR(255)角色描述

权限表(Permission)

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

库存表(Inventory)

字段名称数据类型是否为空备注
InventoryIdINT AUTO_INCREMENT库存 ID,主键,自增长
CarIdINT外键,关联 Car 表的 CarId,表明对应的车辆
InventoryQuantityINT库存数量

http://www.ppmy.cn/news/1555293.html

相关文章

[实战]MySQL时间多了一秒

场景 同时保存一条数据在MySQL和Redis中,JAVA系统中显示Redis和MySQL数据差了一秒,即MySQL比Redis中快了一秒。 复现 我们系统中MySQL的时间类型用的是timestamp,问题是一样的。 CREATE TABLE test_date (id int(11) NOT NULL AUTO_INCRE…

【C#设计模式(20)——观察者模式(Observer Pattern)】

前言 观察者模式 观察者模式:定义了一种对象之间的一对多依赖关系,消息发布者发布通知时,它的所有订阅者(依赖)对象都会自动收到通知并进行相应的更新。 代码 //抽象观察者类 public abstract class Observer {prote…

Java 小抄|解析 JSON 并提取特定层级数据

文章目录 前言环境准备依赖库 示例代码JSON 数据Java 类定义解析 JSON 数据代码解释 结论 前言 在日常开发中,我们经常需要从 JSON 数据中提取特定的信息。本文将介绍如何使用 Java 和 Gson 库解析 JSON 数据,并通过流式处理提取特定层级的数据。我们将…

有效的括号(字节面试题 最优解)

题目来源 20. 有效的括号 - 力扣(LeetCode) 题目描述 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号…

Qt之网络监测

在Qt中,网络监测通常涉及到检测网络连接状态、网络延迟、带宽使用情况等。Qt提供了一些类和模块来帮助开发者实现这些功能。以下是一些常用的方法和类: 1. 检测网络连接状态 QtNetwork模块中的QNetworkConfigurationManager类可以用来检测设备的网络连…

ConfyUI(sd-webui)-aki-v4.9.1升级安装Torch 2.5.1-CUDA12.4【含安装包】

总结: 原地升级操作三步走【要有一个能正常运行的aki-v4.9.1,先压缩备份它】: 一、在绘世-高级选项-安装PyTorch时,找到接近并且低于N卡CUDA驱动版本的版本,显示安装成功; 二、重启绘世-高级选项-原生组件…

将PDF流使用 canvas 绘制然后转为图片展示在页面上(二)

将PDF流转为图片展示在页面上 使用 pdfjs-dist 库来渲染 PDF 页面到 canvas 上,然后将 canvas 转为图片 安装 pdfjs-dist 依赖 npm install pdfjs-dist 或者 yarn add pdfjs-dist创建一个组件来处理 PDF 流的加载和渲染 该组件中是一个包含 PDF 文件的 ArrayBuffer…

OGG FOR MYSQL同步DDL

以下实验测试OGG FOR mysql 同步DDL, OGG 21.3 MYSQL 8.0.27 --创建测试数据 create table oggddl_20241201 (oid int primary key ,oname varchar(10)); create table oggddl_20241202 (oid int primary key ,oname varchar(10)); create table oggddl_20241203…