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.
- 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)
| Table | Columns |
|---|---|
| additional_drivers | 3 |
| coverage_products | 5 |
| customers | 9 |
| damage_photos | 4 |
| damage_reports | 8 |
| driver_licenses | 8 |
| extras | 6 |
| location_hours | 4 |
| locations | 8 |
| maintenance_records | 8 |
| payment_methods | 6 |
| payments | 10 |
| rate_plans | 12 |
| rental_charges | 8 |
| rentals | 18 |
| reservation_coverages | 3 |
| reservation_extras | 4 |
| reservations | 14 |
| staff | 5 |
| vehicle_classes | 8 |
| vehicle_models | 5 |
| vehicle_transfers | 7 |
| vehicles | 11 |
Relationships (45)
additional_drivers.customer_id references customers.idmany to oneadditional_drivers.driver_license_id references driver_licenses.idmany to oneadditional_drivers.rental_id references rentals.idmany to onedamage_photos.damage_report_id references damage_reports.idmany to onedamage_reports.rental_id references rentals.idmany to onedamage_reports.reported_by references staff.idmany to onedamage_reports.vehicle_id references vehicles.idmany to onedriver_licenses.customer_id references customers.idmany to onedriver_licenses.verified_by references staff.idmany to onelocation_hours.location_id references locations.idmany to onemaintenance_records.vehicle_id references vehicles.idmany to onepayment_methods.customer_id references customers.idmany to onepayments.parent_payment_id references payments.idmany to onepayments.payment_method_id references payment_methods.idmany to onepayments.rental_id references rentals.idmany to onepayments.reservation_id references reservations.idmany to onerate_plans.location_id references locations.idmany to onerate_plans.vehicle_class_id references vehicle_classes.idmany to onerental_charges.rental_id references rentals.idmany to onerentals.checked_in_by references staff.idmany to onerentals.checked_out_by references staff.idmany to onerentals.customer_id references customers.idmany to onerentals.driver_license_id references driver_licenses.idmany to onerentals.pickup_location_id references locations.idmany to onerentals.return_location_id references locations.idmany to onerentals.vehicle_id references vehicles.idmany to onereservation_coverages.coverage_product_id references coverage_products.idmany to onereservation_coverages.reservation_id references reservations.idmany to onereservation_extras.extra_id references extras.idmany to onereservation_extras.reservation_id references reservations.idmany to onereservations.customer_id references customers.idmany to onereservations.id references rentals.reservation_idone to onereservations.pickup_location_id references locations.idmany to onereservations.rate_plan_id references rate_plans.idmany to onereservations.return_location_id references locations.idmany to onereservations.vehicle_class_id references vehicle_classes.idmany to onestaff.location_id references locations.idmany to onevehicle_models.vehicle_class_id references vehicle_classes.idmany to onevehicle_transfers.driver_staff_id references staff.idmany to onevehicle_transfers.from_location_id references locations.idmany to onevehicle_transfers.to_location_id references locations.idmany to onevehicle_transfers.vehicle_id references vehicles.idmany to onevehicles.current_location_id references locations.idmany to onevehicles.home_location_id references locations.idmany to onevehicles.vehicle_model_id references vehicle_models.idmany to one
How to use this template
- Open the ER diagram to see the tables and how they relate.
- Copy it into your workspace. You get your own editable copy, in DBML.
- 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.