Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Menyewakan Mobil Sesederhana Mengemudi:Model Data untuk Perusahaan Rental Mobil

Anda mungkin telah menyewa mobil pada liburan terakhir Anda. Anda memesan mobil Anda secara online, dan kemudian mengambilnya dari lokasi yang ditentukan setelah membayar semua biaya yang telah disepakati sebelumnya. Setelah selesai, Anda mengembalikannya ke agen dan mungkin membayar beberapa biaya tambahan. Pernahkah Anda berpikir tentang sistem yang membuat semua ini terjadi? Dalam artikel ini, kita akan melihat model data untuk sistem rental mobil.

Mengapa Membuat Model Data Rental Mobil Lain?

Saya ingin merancang model data dari sistem yang berfungsi penuh untuk perusahaan persewaan mobil internasional. Perusahaan menyimpan kendaraan untuk disewa di berbagai segmen (mini, ekonomi, menengah, SUV, kargo dan limusin). Ini mengoperasikan operasinya dari berbagai kota di berbagai negara. Perusahaan mengizinkan pelanggannya untuk menyewa mobil dari satu lokasi (lokasi penjemputan) dan menurunkannya di lokasi lain (lokasi pengantaran).

Pada titik ini, mari kita lihat artikel sebelumnya yang menjelaskan model perusahaan rental mobil sederhana. Model ini melayani semua layanan dasar yang ditawarkan oleh perusahaan rental mobil.




Sebelum kita menambahkan fungsi baru, saya ingin memasukkan beberapa perubahan kecil ke dalam model ini, yaitu:

  • Menambahkan city sebagai kolom di location tabel, dan menghapus tabel kota sama sekali.
  • Menambahkan satu kolom tambahan, zip (seperti dalam kode ZIP, atau kode pos), di location meja. Sistem ini akan mengidentifikasi lokasi pengambilan/pengantaran dengan kode posnya. Ada banyak negara di mana kode ZIP adalah nomor alfanumerik, jadi saya akan menyimpan kolom ini sebagai kolom varchar.

  • Menambahkan driving license issue date kepada customer meja. Ada beberapa negara di mana batas kecepatan maksimum bergantung pada kapan lisensi dikeluarkan untuk pengemudi.

  • Mengganti nama category tabel ke car_category , yang menjelaskan kontennya dengan lebih tepat.
  • Menyimpan informasi penerbangan pelanggan jika lokasi penjemputan di dekat bandara. Hal ini memungkinkan sistem untuk membuat perubahan yang sesuai pada permintaan reservasi pelanggan jika terjadi penundaan atau pembatalan penerbangan. Untuk melakukan ini, saya menambahkan tabel lain yang disebut flight_detail dan hubungkan ke reservation meja.

Menambahkan Informasi Faktur Pelanggan

Untuk pembuatan faktur, kita perlu menyimpan nilai sewa untuk setiap item inventaris, termasuk mobil dan peralatan. Biaya sewa ditetapkan untuk setiap kategori, karena proses reservasi berkaitan dengan kategori daripada mobil individu.

Izinkan saya menambahkan rental_value di car_category dan equipment_category tabel.

Pada baris yang sama, harus ada beberapa biaya yang terkait dengan asuransi. Biaya ini ditentukan oleh perusahaan asuransi. Untuk saat ini, saya akan menambahkan satu kolom lagi, biaya, di insurance tabel.

Untuk faktur, saya membuat tabel terpisah untuk menyimpan semua detail faktur. Dengan cara ini, detail yang sama ini dapat dengan mudah diambil kapan pun dibutuhkan. Karena penghitungan nilai ini agak rumit, saya tidak akan mengulanginya lagi dan lagi untuk faktur. Saya akan menambahkan satu tabel, yaitu rental_invoice , yang terutama terkait dengan rental meja.

rental_invoice tabel berisi kolom berikut:

  • id – kunci utama tabel ini.
  • rental_id – kunci utama rental meja. Saya akan menambahkan satu batasan unik pada kolom ini:hanya boleh ada satu catatan untuk setiap rental.
  • car_rent – Kolom ini menandakan biaya sewa kendaraan yang disewa.
  • Biaya ini dapat ditentukan dengan menggunakan SQL berikut:

    select a.rental_value from car_category a, car b, rental c
    where  c.car_id = b.car_id and b.category_id = a.id
    and c.id = ;
    

  • equipment_rent_total – Kolom ini menunjukkan jumlah biaya untuk setiap peralatan yang disewakan kepada pelanggan
  • Total biaya dapat ditentukan dengan menggunakan SQL berikut:

    select sum(a.rental_value) from equipment_category a, equipment b, car_equipment c, car d, rental e
    where  a.id = b.equipment_category_id and b.id = c.equipment_id
    and c.car_id = d.id and d.id = e.car_id 
    and e.id = ;
    

  • insurance_cost_total – Kolom ini untuk total biaya asuransi nasabah. Ini dapat ditentukan dengan menggunakan SQL berikut

    select sum(a.cost) from insurance a, rental_insurance b, rental c
    where a.id = b.insurance_id and b.rental_id = c.id 
    and c.id = ;
    

  • service_tax dan VAT – Seperti namanya, kolom ini menyimpan nilai untuk pajak layanan dan PPN yang berlaku.
  • total_amount_payable – Kolom ini akan berisi nilai dari total jumlah tagihan. Ini akan menjadi jumlah kolom berikut:

    total_amount_payable =car_rent + equipment_rent_total + insurance_cost_total

  • waiver_amount dan net_amount_payable – Kolom ini menyimpan nilai untuk jumlah pengabaian (jika ada) dan jumlah bersih yang harus dibayar untuk pembayaran. waiver_amount adalah berapa banyak yang akan dibebaskan dari total faktur. Ini biasanya digunakan ketika perusahaan rental menawarkan diskon kepada pelanggan. Rumus untuk menentukan net_amount_payable terlihat seperti ini:

    net_amount_payable =total_amount_payable – waiver_amount

Inventaris Seluler – Untuk perusahaan rental mobil, persediaannya selalu mobile karena berpindah dari satu lokasi ke lokasi lain. Jika Anda melihat kotak centang yang mengatakan 'kembali ke lokasi yang berbeda?' saat Anda memesan mobil secara online, Anda telah melihatnya beraksi. Sistem memperlakukan permintaan Anda sedikit berbeda jika lokasi pengembalian TIDAK sama dengan lokasi pengambilan. Sistem selalu melacak inventarisnya saat disewakan dan dikembalikan.

Misalnya, satu pelanggan menyewa mobil dari Chicago, mengonfirmasi bahwa lokasi pengantaran akan berbeda, dan berkendara ke tujuannya di Saint Louis. Jelas, dia akan menurunkan mobil di lokasi perusahaan Saint Louis. Dalam hal ini, segera setelah dia mengemudikan mobil dari lokasi Chicago, bagian inventaris ini tidak lagi terikat pada kantor itu. Mobil akan didaftarkan lagi, kali ini ke kantor Saint Louis, segera setelah dia selesai melakukannya.

Untuk menggabungkan mekanisme ini, saya akan menambahkan satu kolom, yaitu current_location_id , di car tabel serta equipment meja. Kolom ini hanya menampung ID lokasi yang valid dari location tabel.

Jadi, dengan contoh di atas, lokasi awal mobil adalah Chicago; akan diupdate setelah pelanggan mengembalikan mobil ke kantor tujuan.

Menyiapkan Opsi Pengisian Bahan Bakar

Sebagian besar perusahaan persewaan mobil memberikan jenis opsi pengisian bahan bakar berikut:
  1. Maju Servis Bahan Bakar – pelanggan membayar tangki bahan bakar penuh di muka, dan mengembalikan mobil dengan tangki kosong.
  2. Biaya Layanan Bahan Bakar – pelanggan mendapatkan mobil dengan tangki bahan bakar penuh, tetapi membayarnya berdasarkan penggunaan bahan bakar.
  3. Swalayan Bahan Bakar – pelanggan menerima mobil dengan tangki bahan bakar penuh dan mengembalikan mobil dengan tangki penuh. Ini adalah opsi yang paling banyak diterima dari ketiganya.

Di sini, kami tidak mempermasalahkan opsi mana yang dipilih pelanggan. Yang kami inginkan adalah mendaftarkan pilihan mereka saat memproses permintaan sewa.

Untuk memenuhi kebutuhan ini, saya akan menambahkan satu tabel, fuel_option , yang menyimpan semua opsi yang memungkinkan untuk mengisi bahan bakar mobil. Harus ada pemetaan satu-ke-satu antara permintaan sewa dan fuel_option , karena pelanggan diminta untuk memilih salah satu pada saat memesan sewa.

Model Data Penyewaan Mobil Terakhir




Di banyak daerah, perusahaan persewaan mobil beralih ke penggunaan pengalaman persewaan mandiri tanpa kunci untuk pelanggan mereka. Mereka tidak ingin membuat pelanggan mereka menunggu di konter hanya untuk menyelesaikan dokumen dan mengambil kunci mobil. Dapatkah model data kami saat ini memenuhi persyaratan seperti itu? Perubahan apa yang diperlukan dalam model data kami untuk mewujudkannya?

Apakah Anda memiliki pemikiran tentang model data sewa mobil kami? Mari kita mulai diskusi! Jangan ragu untuk membagikan masukan Anda di bagian komentar.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hal-hal menarik tentang BUKAN pemicu

  2. Manajemen Transaksi dengan Django 1.6

  3. Panduan Utama Anda untuk Bergabung dengan SQL:INNER JOIN – Bagian 1

  4. Memisahkan String:Sebuah Tindak Lanjut

  5. SQL ANTARA Operator untuk Pemula