Car Rental ER diagram and database schema

The Car Rental database schema is a DB Planner template with 23 tables, 174 columns and 45 relationships, free to use. Core tables include additional_drivers, coverage_products, customers, damage_photos. It can be opened as an interactive ER diagram or exported as PostgreSQL, MySQL, or SQL Server DDL.

ER diagram of the Car Rental database schema, showing 23 tables and their relationships
FIG. 1: entity relationship diagram, 23 tables
Tables
23
Columns
174
Relationships
45
Category
Marketplace
Exports
DBML, SQL, C#
Price
Free

What this schema models

A complete car rental system database design, built the way rental companies actually operate: 23 tables, 11 enums and 45 relationships covering locations and staff, vehicle classes and the fleet, maintenance, damage and transfers, rate plans, extras and protection products, customers and driver's licenses, reservations, rental agreements and itemized billing. THE FOUR DESIGN RULES 1. Reserve a CLASS, rent a CAR. A reservation promises a vehicle class ("Toyota Corolla or similar"); the specific car is assigned only at pickup, on the rental. Availability is counted per class, per location, per time window. 2. A reservation is not a rental. The reservation is the promise and its quoted price; the rental agreement is what actually happened: odometer and fuel out and in, real times, the license that was checked. Walk-up rentals simply have no reservation. 3. Prices are snapshots. The quote is frozen on the reservation and every final charge is its own line, so editing a rate plan never changes a confirmed booking or an issued invoice. 4. Card activity is rows, not a balance. The deposit authorization at pickup, the capture at return, releases and refunds are separate payments, each pointing at its parent. DETAILS WORTH STEALING - Vehicle classes use ACRISS codes, the industry standard (ECMR, CDAR and so on). - vehicles.status is a cached convenience; the authoritative "is it on rent?" is an open rental, enforced by a partial unique index. - Damage reports with photos are recorded at checkout too, so a customer is never billed for damage that was already there. - Fuel is recorded in eighths, as on a real checkout sheet, so refuelling charges are computable. - One-way rentals and fleet rebalancing are both vehicle transfers. - Cards are stored only as payment processor tokens. WHAT YOU GET Clean DBML that imports directly into DB Planner, and a laid-out board with zones color-coded and framed: locations and staff, fleet, pricing and products, reservations, rentals, billing and customers. Every table carries a note. Postgres-flavoured types that port cleanly to MySQL or SQL Server. Useful for developers building a rental or fleet booking platform, and for students who need a realistic car rental system ER diagram for a DBMS project. This is a schema design reference; tax and insurance rules vary by market and belong in your own business logic.

Tables (23)

Tables in the Car Rental Database Schema schema and how many columns each has
TableColumns
additional_drivers3
coverage_products5
customers9
damage_photos4
damage_reports8
driver_licenses8
extras6
location_hours4
locations8
maintenance_records8
payment_methods6
payments10
rate_plans12
rental_charges8
rentals18
reservation_coverages3
reservation_extras4
reservations14
staff5
vehicle_classes8
vehicle_models5
vehicle_transfers7
vehicles11

Relationships (45)

  • additional_drivers.customer_id references customers.id many to one
  • additional_drivers.driver_license_id references driver_licenses.id many to one
  • additional_drivers.rental_id references rentals.id many to one
  • damage_photos.damage_report_id references damage_reports.id many to one
  • damage_reports.rental_id references rentals.id many to one
  • damage_reports.reported_by references staff.id many to one
  • damage_reports.vehicle_id references vehicles.id many to one
  • driver_licenses.customer_id references customers.id many to one
  • driver_licenses.verified_by references staff.id many to one
  • location_hours.location_id references locations.id many to one
  • maintenance_records.vehicle_id references vehicles.id many to one
  • payment_methods.customer_id references customers.id many to one
  • payments.parent_payment_id references payments.id many to one
  • payments.payment_method_id references payment_methods.id many to one
  • payments.rental_id references rentals.id many to one
  • payments.reservation_id references reservations.id many to one
  • rate_plans.location_id references locations.id many to one
  • rate_plans.vehicle_class_id references vehicle_classes.id many to one
  • rental_charges.rental_id references rentals.id many to one
  • rentals.checked_in_by references staff.id many to one
  • rentals.checked_out_by references staff.id many to one
  • rentals.customer_id references customers.id many to one
  • rentals.driver_license_id references driver_licenses.id many to one
  • rentals.pickup_location_id references locations.id many to one
  • rentals.return_location_id references locations.id many to one
  • rentals.vehicle_id references vehicles.id many to one
  • reservation_coverages.coverage_product_id references coverage_products.id many to one
  • reservation_coverages.reservation_id references reservations.id many to one
  • reservation_extras.extra_id references extras.id many to one
  • reservation_extras.reservation_id references reservations.id many to one
  • reservations.customer_id references customers.id many to one
  • reservations.id references rentals.reservation_id one to one
  • reservations.pickup_location_id references locations.id many to one
  • reservations.rate_plan_id references rate_plans.id many to one
  • reservations.return_location_id references locations.id many to one
  • reservations.vehicle_class_id references vehicle_classes.id many to one
  • staff.location_id references locations.id many to one
  • vehicle_models.vehicle_class_id references vehicle_classes.id many to one
  • vehicle_transfers.driver_staff_id references staff.id many to one
  • vehicle_transfers.from_location_id references locations.id many to one
  • vehicle_transfers.to_location_id references locations.id many to one
  • vehicle_transfers.vehicle_id references vehicles.id many to one
  • vehicles.current_location_id references locations.id many to one
  • vehicles.home_location_id references locations.id many to one
  • vehicles.vehicle_model_id references vehicle_models.id many to one

How to use this template

  1. Open the ER diagram to see the tables and how they relate.
  2. Copy it into your workspace. You get your own editable copy, in DBML.
  3. Export it as PostgreSQL, MySQL, or SQL Server DDL, or as C# models.

The copy opens in DB Planner’s ER diagram tool, with the schema as text in the DBML editor beside it. Have a database already? Turn its SQL into an ER diagram instead.

Frequently asked questions

What is in the Car Rental database schema?
23 tables and 45 relationships, across 174 columns. The table names and the full relationship list are shown on this page.
Can I export it to PostgreSQL or MySQL?
Yes. Every DB Planner template exports as DBML, as PostgreSQL, MySQL, or SQL Server DDL, and as C# models.
Is this template free?
Yes. You can open it in the browser without an account, and copy it into your own workspace with a free DB Planner account.
Can I change it after copying it?
Yes. A copy is yours: you can rename tables, add columns, and export it. Changes the author makes later do not affect your copy.