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

文章目录

  • 汽车租赁系统数据库 E-R 图设计
  • 一、实体(Entities)
  • 二、实体间关系(Relationships)
  • 三、数据表(Tables)


汽车租赁系统数据库 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库存数量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/936422.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【小沐学GIS】基于C++绘制三维数字地球Earth(OpenGL、glfw、glut、QT)第三期

🍺三维数字地球系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(456:OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(456:OpenGL、glfw、glut)第二期3【小沐…

Vizcom:AI驱动的草图到3D设计革命

Vizcom是一家领先的AI技术公司,专注于为工业设计师提供工具,将手绘草图快速转化为可制造的3D模型,从而加速产品迭代和创新。 公司背景与愿景 成立于2021年的Vizcom由前Nvidia工业设计师Jordan Taylor创立。Taylor凭借其深厚的创意设计背景和技术敏锐度,看到了生成对抗网络…

【开源免费】基于SpringBoot+Vue.JS课程智能组卷系统(JAVA毕业设计)

本文项目编号 T 009 ,文末自助获取源码 \color{red}{T009,文末自助获取源码} T009,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 老…

Linux常用指令-----下

Linux常用指令------上 Linux常用指令------中 Linux系列 文章目录 Linux系列前言一、more指令二、less指令三、head指令和tail指令四、grep指令五、zip指令和unzip指令六、tar指令1、打包压缩2. 预览3. 解压解包 前言 在上一篇博客中,我給大家介绍了cat指令&#…

【安全研究】某黑产网站后台滲透与逆向分析

文章目录 x01. 前言x02. 分析 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与…

【Linux SH脚本】LinuxCheck 应急检查信息脚本

LinuxCheck 1.下载地址 【Linux SH脚本】LinuxCheck 应急检查信息脚本 2.简介 LinuxCheck 是一个开源的自动化检查脚本,旨在快速检测 Linux 系统的安全配置和潜在问题。它支持多种发行版,能够扫描并生成详细的报告,涵盖用户管理、权限配置…

JaxaFx学习(一)

目录: (1)基本结构 (2)Application (3)Stage窗口显示 (4)Scene场景切换 (5)UI控件通用属性 (6)UI控件属性绑定很属性…

悬赏任务源码(悬赏发布web+APP+小程序)开发附源码

悬赏任务源码是指一个软件或网站的源代码,用于实现悬赏任务的功能。悬赏任务是指发布方提供一定的奖励,希望能够找到解决特定问题或完成特定任务的人。悬赏任务源码通常包括任务发布、任务接受、任务完成和奖励发放等功能的实现。搭建悬赏任务源码是一个…

Java集合操作中的包含性判断:深入探讨List.contains()方法

文章目录 Java集合操作中的包含性判断:深入探讨List.contains()方法问题分析与解答1. 为什么list.contains(filterValueList)返回false?2. 正确的实现方法方法一:使用containsAll()方法二:Stream流操作方法三:传统循环…

帆软的无数据展示方案

文章目录 需求描述第一步、设置控件第二步、设置数据集优化改进 在日常工作中,使用到帆软报表工具,以下记录日常使用的过程, 需求描述 用帆软报表展示销量的信息,选择不同的订单状态,展示其订单数和总金额。 第一步、…

ubuntu20.04安装qt creator

以上三种,选择其一安装即可 回答1: 您可以按照以下步骤在ubuntu 20.04上安装Qt Creator: 打开终端并输入以下命令以更新软件包列表: sudo apt update 安装Qt Creator和Qt库: sudo apt install qtcreator qt5-def…

MySQL系列之数据类型(String)

导览 前言一、字符串类型知多少1. 类型说明2. 字符和字节的转换 二、字符串类型的异同1. CHAR & VARCHAR2. BINARY & VARBINARY3. BLOB & TEXT4. ENUM & SET 结语精彩回放 前言 MySQL数据类型第三弹闪亮登场,欢迎关注O。 本篇博主开始谈谈MySQL是如…

linux网络编程 | c | select实现多路IO转接服务器

poll实现多路IO转接服务器 基于该视频完成 04-poll函数实现服务器_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 要求:能看懂看,看不懂也没啥大事,现在基本都用epoll代替了 大家看视频思路吧,代码就是从讲义里面copy了一份…

数组专题leetcode

链表适合插入、删除,时间复杂度 O(1) 数组是适合查找操作,但是查找的时间复杂度并不为 O(1)。即便是排好序的数组,你用二分查找,时间复杂度也是 O(logn) 数组:内存连续的存储相同类型 【数组插入】: 如果在数组的末…

开源 AI 智能名片 S2B2C 商城小程序对私域流量运营的全方位助力

在当今竞争激烈的商业环境中,私域流量运营已成为企业实现可持续发展和提升竞争力的关键策略之一。开源 AI 智能名片 S2B2C 商城小程序凭借其独特的功能与特性,从多个维度为私域流量运营提供了强有力的支持与推动,以下将详细阐述其在各个方面的…

nginx中的root和alias的区别

alias 在E:\\test\\目录下创建一个index.html文件 在nginx.conf文件配置alias,路径填写为绝对路径,但是要注意,这里结尾是文件夹的名字 然后下面的/aa/ 是随便起的名字,也不是文件夹的名字,在浏览器访问的使用的 在浏览器使用 …

MySQL之数据库三大范式

一、什么是范式? 范式是数据库遵循设计时遵循的一种规范,不同的规范要求遵循不同的范式。 (范式是具有最小冗余的表结构) 范式可以 提高数据的一致性和 减少数据冗余和 更新异常的问题 数据库有六种范式(1NF/2NF/3NF…

【昇腾】NPU ID:物理ID、逻辑ID、芯片映射关系

起因: https://www.hiascend.com/document/detail/zh/Atlas%20200I%20A2/23.0.0/re/npu/npusmi_013.html npu-smi info -l查询所有NPU设备: [naienotebook-npu-bd130045-55bbffd786-lr6t8 DCNN]$ npu-smi info -lTotal Count : 1NPU…

TcpServer 服务器优化之后,加了多线程,对心跳包进行优化

TcpServer 服务器优化之后&#xff0c;加了多线程&#xff0c;对心跳包进行优化 TcpServer.h #ifndef TCPSERVER_H #define TCPSERVER_H#include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <vector> #include <map> #…

ansible自动化运维(一)简介及清单,模块

相关文章ansible自动化运维&#xff08;二&#xff09;playbook模式详解-CSDN博客ansible自动化运维&#xff08;三&#xff09;jinja2模板&&roles角色管理-CSDN博客ansible自动化运维&#xff08;四&#xff09;运维实战-CSDN博客 ansible自动化运维工具 1.什么是自…