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

Membuat Model Data untuk Carpooling

Saat ini, carpooling diterima dan dipromosikan oleh orang-orang di seluruh dunia. Ini tentu saja mengurangi jejak karbon pribadi seseorang, dan bisa lebih hemat biaya daripada menyewa atau membeli mobil.

Carpooling juga membutuhkan banyak pekerjaan – pekerjaan organisasi yang dapat dengan mudah dilakukan oleh database yang dirancang dengan baik. Artikel ini menjelaskan model data mendetail yang dapat digunakan situs web carpooling.

Desain Data, Temui Carpooling

Jadi, kita perlu merancang model data untuk situs berbagi tumpangan (alias carpooling).

Carpooling sedikit berbeda dari sewa mobil. Dalam carpooling, mobil dimiliki oleh satu orang, dan mereka menawarkan tumpangan kepada orang lain. Setiap rekan pelancong membayar biaya perjalanan, termasuk bahan bakar, biaya jalan tol, dll.

Persyaratan Proyek:

  • Situs web harus mengizinkan pengguna (alias anggota ride-share) untuk mendaftarkan diri menggunakan nama, nomor telepon, alamat email, nomor SIM, dll.
  • Anggota harus diizinkan untuk menetapkan preferensi their tentang perjalanan dan rekan perjalanan.
  • Anggota yang disebut pemilik wahana dapat membuat kendaraan dengan memasukkan detail perjalanan mereka (yaitu, titik awal dan tujuan, waktu mulai, biaya per pengendara, dll.)
  • Anggota lain dapat mencari wahana yang tersedia untuk tujuan kota .
  • Anggota yang mencari tumpangan dapat menghubungi pemilik kendaraan dan melakukan reservasi untuk tempat duduk mereka.
  • Pemilik kendaraan harus dapat menyetujui atau menolak permintaan reservasi.
  • Berdasarkan tindakan yang diambil oleh pemilik kendaraan atas permintaan reservasi, jumlah kursi yang tersedia harus diperbarui.
  • Pemilik kendaraan juga dapat menandai kota dalam perjalanan, yaitu kota dalam perjalanan dari titik awal ke tujuan. Jika mereka mau, pemilik kendaraan juga harus dapat mengakomodasi orang-orang untuk kota-kota dalam perjalanan.

Dengan mempertimbangkan parameter ini, mari kita identifikasi entitas dan hubungan utama untuk model data carpooling kita.

Mengidentifikasi Entitas dan Hubungan

Ketika saya melihat persyaratan secara keseluruhan, saya dapat dengan mudah mengetahui entitas utama. Mereka adalah:

  • anggota (termasuk pemilik pengendara dan rekan pelancong )
  • mobil
  • preferensi
  • naik
  • kota
  • permintaan perjalanan

Anggota – Setiap orang yang mengunjungi situs web ini harus mendaftar sebelum menggunakannya. Dalam proses ini, mereka perlu memberikan detail seperti first_name , last_name , gender , email , dan contact number . Untuk co-travelers, barang-barang ini sudah cukup. Pemilik kendaraan, yang mungkin akan mengemudi, perlu mengisi beberapa detail tambahan seperti driving_license_number dan driving_license_valid_from juga harus disertakan. Informasi lisensi memberi tahu rekan pelancong sesuatu tentang pengalaman mengemudi pemilik kendaraan. Ini akan membantu rekan pelancong untuk memilih perjalanan terbaik yang tersedia. Saya akan menambahkan satu tabel bernama member dengan semua kolom yang diperlukan.

Mobil – Pemilik wahana perlu menambahkan detail untuk setidaknya satu mobil sebelum membuat tumpangan. Jadi mari kita buat tabel lain, bernama car , untuk menyimpan informasi ini. Satu anggota dapat memiliki lebih dari satu mobil. Sebuah tumpangan dapat bergantung pada pasangan anggota-mobil, jadi kita membutuhkan meja lain untuk membangun hubungan ini. Kami akan menyebut tabel ini member_car . Saya akan merujuk kunci utama tabel ini dalam ride meja tempat saya akan menyimpan detail perjalanan. Saya juga akan menambahkan satu kolom, yaitu comfort_level , yang menyimpan tingkat kenyamanan mobil dalam skala 0 hingga 5. Tingkat ini secara otomatis dihitung oleh sistem, berdasarkan detail yang diberikan anggota lain tentang mobil tersebut.

Preferensi - Preferensi penting bagi semua orang. Situs web memungkinkan anggota untuk mengisi preferensi mereka tentang mobil dan rekan perjalanan mereka. Detail ini tetap opsional pada saat pendaftaran, tetapi harus diisi sebelum membuat perjalanan . Pemilik kendaraan kemungkinan akan mencari orang dengan preferensi yang sama sehingga semua orang bepergian dengan nyaman. Orang yang mencari tumpangan melakukan hal yang sama.

Beberapa preferensi dasar untuk perjalanan dengan mobil adalah:

  • Apakah merokok diperbolehkan di dalam mobil?
  • Apakah hewan peliharaan diperbolehkan?
  • Seberapa cerewet si pemilik wahana? Berapa tingkat obrolan yang dapat diterima selama perjalanan? (Kemungkinan tanggapan di sini termasuk tidak ada, obrolan ringan, gabfest.)
  • Jenis musik apa yang disukai pemilik wahana?
  • Volume musik apa yang diizinkan oleh pemilik wahana?

Karena detail ini opsional saat pendaftaran, saya akan membuat tabel lain bernama member_preference untuk menyimpan detail ini. Dua tabel tambahan menyimpan opsi yang memungkinkan untuk musik (music_preference ) dan percakapan di dalam mobil (chitchat_preference ).

Mari kita memiliki hubungan nol-ke-satu antara member dan member_preference tabel, karena anggota mungkin atau mungkin tidak mengatur preferensi mereka ke dalam sistem saat mereka mendaftar, dan hanya ada satu catatan untuk preferensi per anggota.

Kota – Satu tabel master, city , diperlukan untuk menyimpan daftar semua kota yang dilayani oleh situs web. Ini harus mencakup informasi negara bagian dan negara yang relevan untuk setiap kota.

Berkendara – Seorang anggota dapat membuat tumpangan dengan mengisi mobil mana yang dia tumpangi; dari kota mana dia memulai; kota mana yang dia tuju; tanggal dan waktu perjalanan; jumlah kursi yang tersedia; dan kontribusi per kepala. Kontribusi per kepala adalah jumlah yang harus dibayar oleh setiap rekan perjalanan untuk biaya perjalanan. Pemilik wahana juga dapat menyebutkan berapa banyak barang bawaan yang diharapkan dari rekan perjalanan sehingga semuanya akan muat di dalam mobil. Jadi kita tambahkan satu kolom, luggage_size_allowed , untuk barang ini. Nilai yang mungkin untuk kolom ini adalah ringan, sedang, dan berat.

Permintaan Perjalanan – Anggota dapat melihat daftar wahana yang tersedia dari satu kota ke kota lain atau mengajukan permintaan untuk perjalanan tertentu. Kami pasti membutuhkan satu meja untuk menyimpan detail tentang permintaan tersebut. Tabel bernama request sesuai dengan tujuan. Permintaan awalnya dimasukkan sebagai permintaan 'dikirim', dan pemilik wahana adalah satu-satunya orang yang diizinkan untuk menyetujui atau menolaknya. Jumlah kursi yang tersedia di meja perjalanan akan disesuaikan untuk setiap persetujuan dan/atau penolakan.

Kota Dalam Rute – Berbagi perjalanan tidak semua tentang pergi langsung dari titik awal ke tujuan. Satu dapat berbagi tumpangan dengan orang lain untuk en-route kota juga. Misalnya, jika seorang pria bepergian dari Chicago ke Miami, dia dapat mengakomodasi seseorang yang ingin pergi dari Chicago ke Nashville. Nashville adalah salah satu kota yang akan dia lewati dalam rutenya, jadi ini adalah kota dalam perjalanan. Sistem kami harus memungkinkan pemilik kendaraan untuk mengatur kota dalam perjalanan berdasarkan rute yang akan mereka ikuti untuk mencapai tujuan mereka. Jika rekan pelancong mau, mereka bisa turun di kota mana pun yang sedang dalam perjalanan; biaya perjalanan mereka akan disamaratakan.

Kami akan membuat tabel lain yang disebut enroute_city untuk tujuan ini. Catatan akan ditambahkan saat pemilik wahana menambahkan kota dalam perjalanan ke wahana mereka. Anggota kemudian dapat meminta reservasi untuk melakukan perjalanan ke salah satu kota dalam perjalanan. Oleh karena itu, saya merujuk kunci utama tabel ini ke dalam request meja.

order_from_source kolom di enroute_city tabel menandakan jalur yang akan diikuti oleh pemilik wahana untuk perjalanan tersebut.

Laporan Di Situs Web:

Ada berbagai laporan (ekstrak data) yang dapat ditampilkan di website ini. Mari saya jelaskan beberapa di antaranya:

  1. Perjalanan tersedia dari satu kota tertentu ke kota lain – Ini adalah salah satu laporan yang akan diekstraksi cukup sering, karena menggambarkan inti dari situs web ini. Sebagian besar anggota akan mengakses situs web ini untuk mencari alternatif perjalanan atau berbagi perjalanan. Saat mengekstrak laporan ini, anggota harus memasukkan nama kota awal dan tujuan mereka. SQL berikut:

    Select m.first_name || ‘ ‘ || m.last_name as “Ride Owner”, c.name as “Car”, c.comfort_level as “Comfort Level”, mp.is_smoking_allowed, mp.is_pet_allowed, r.travel_start_time, r.contribution_per_head, seats_offered 
    from ride r, member_car mc, car c, member m, member_preference mp
    where r.member_car_id = mc.id and mc.member_id = u.id 
    and mc.car_id = c.id and m.id = mp.member_id
    and source_city_id = (select city_id from city where city_name = ‘CHICAGO’)
    and destination_city_id = (select city_id from city where city_name = ‘MIAMI’)
    and seats_offered > (select count(id) from request req, request_status reqs where req.request_status_id = reqs.id and upper(reqs.description) = ‘APPROVE’ and req.ride_id = r.id);
    

  2. Daftar permintaan tumpangan yang dikirim/disetujui – Laporan ini akan ditampilkan kepada pemilik kendaraan. Ini akan menunjukkan siapa yang telah mengirimkan permintaan perjalanan, dan pemilik hanya dapat mengambil tindakan atas permintaan dari laporan ini. SQL untuk ini sebagai berikut:

    select first_name || ‘ ‘ || last_name as “Submitter”,  req.created_on as “Submitted on”, rs.description as “Request Status” 
    from member m, request req, request_status rs
    where m.id = req.requester_id and rs.id = req.request_status_id
    and req.ride_id = ;
    

  3. Tawaran sebelumnya dan saat ini ditawarkan – Laporan ini akan ditampilkan kepada pemilik kendaraan di dasbor mereka sendiri. SQL berikut dapat digunakan untuk membuat daftar wahana yang saat ini ditawarkan oleh pemilik wahana:

    Select m.first_name || ‘ ‘ || m.last_name as “Ride Owner”, c.name as “Car”, c.comfort_level as “Comfort Level”, mp.is_smoking_allowed, mp.is_pet_allowed, r.travel_start_time, r.contribution_per_head, decode(seats_offered,0,’FULL’, seats_offered || ‘ seats available‘) from ride r, member_car mc, car c, member m, member_preference mp
    where r.member_car_id = mc.id and mc.member_id = m.id 
    and mc.car_id = c.id and u.id = mp.member_id
    and r.travel_start_time >= sysdate
    and m.id = ;
    

    Dan SQL ini dapat digunakan untuk mengekstrak daftar wahana yang ditawarkan sebelumnya:

    Select m.first_name || ‘ ‘ || m.last_name as “Ride Owner”, c.name as “Car”, c.comfort_level as “Comfort Level”, mp.is_smoking_allowed, mp.is_pet_allowed, r.travel_start_time, r.contribution_per_head, decode(seats_offered,0,’FULL’, seats_offered || ‘ seats available‘) from ride r, member_car mc, car c, member m, member_preference mp
    where r.member_car_id = mc.id and mc.member_id = m.id 
    and mc.car_id = c.id and u.id = mp.member_id
    and r.travel_start_time < sysdate
    and m.id = ;
    

  4. Daftar rekan perjalanan untuk perjalanan – Laporan ini akan tersedia untuk semua pelancong, termasuk pemilik kendaraan. Semuanya dapat membuat daftar semua rekan pelancong untuk perjalanan mereka di masa lalu atau masa depan.

    select first_name || ‘ ‘ || last_name 
    from member m, request req, request_status rs
    where m.id = req.requester_id and rs.id = req.request_status_id
    and rs.description = ‘APPROVED’
    and req.ride_id = 
    UNION
    select first_name || ‘ ‘ || last_name 
    from member m, member_car mc, ride r
    where m.id = mc.member_id and mc.id = r.member_car_id 
    and r.id = ;
    

Model Data Akhir




Bagaimana Dengan Peningkatan?

Bisakah kita lebih meningkatkan model ini? Ya kita bisa! Masih ada beberapa area yang perlu diurus.

Bagaimana jika seseorang ingin membuat permintaan perjalanan berulang? Misalkan seorang pengemudi melakukan perjalanan dari satu kota ke kota lain setiap akhir pekan, dan mereka selalu bersedia untuk berbagi perjalanan ini. Permintaan berulang akan lebih nyaman.

Bagaimana seseorang bisa mengandalkan pria tak dikenal yang menawarkan tumpangan? Harus ada cara untuk membantu orang mengevaluasi orang lain sebelum meminta tumpangan. Salah satu mekanisme yang layak adalah memublikasikan dan membagikan umpan balik tentang pemilik kendaraan dan rekan pelancong. Detail ini pasti akan membantu orang lain memesan perjalanan dengan orang asing dengan lebih percaya diri. Agar hal ini terjadi, perubahan apa yang diperlukan pada model data kita?

Jangan ragu untuk membagikan masukan Anda tentang model ini.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mendapatkan Bulan dari Tanggal di T-SQL

  2. Mengidentifikasi dan Memperbaiki Masalah Performa Catatan yang Diteruskan

  3. Menggunakan Geekbench 3 untuk Mengevaluasi Kinerja Server Database

  4. Tutorial DBMS :Kursus Singkat Lengkap tentang DBMS

  5. Model Data Badan Opini Publik