Database
 sql >> Datenbank >  >> RDS >> Database

Erstellen eines Datenmodells für Fahrgemeinschaften

Heutzutage wird Carpooling von Menschen auf der ganzen Welt akzeptiert und gefördert. Es reduziert sicherlich den persönlichen CO2-Fußabdruck und kann kostengünstiger sein als das Mieten oder Kaufen eines Autos.

Fahrgemeinschaften machen auch viel Arbeit – organisatorische Arbeit, die eine gut konzipierte Datenbank ohne Weiteres erledigen kann. Dieser Artikel erläutert ein detailliertes Datenmodell, das eine Website für Fahrgemeinschaften verwenden könnte.

Datendesign, Lernen Sie Fahrgemeinschaften kennen

Wir müssen also ein Datenmodell für eine Website für Mitfahrgelegenheiten (auch Fahrgemeinschaften genannt) entwerfen.

Fahrgemeinschaften sind etwas anders als eine Autovermietung. Bei Fahrgemeinschaften gehört das Auto einer Person und sie bieten anderen Mitfahrgelegenheiten an. Alle Mitreisenden zahlen für die Fahrtkosten, einschließlich Kraftstoff, Mautgebühren usw.

Projektanforderungen:

  • Die Website sollte den Benutzern erlauben (auch bekannt als Mitfahrgelegenheitsmitglieder), sich mit ihrem Namen, ihrer Telefonnummer, ihrer E-Mail-Adresse, ihrer Führerscheinnummer usw. zu registrieren
  • Mitglieder sollten ihre Präferenzen festlegen können bezüglich Mitfahrgelegenheiten und Mitreisenden.
  • Mitglieder, die Besitzer von Fahrten genannt werden, können eine Fahrt erstellen durch Eingabe ihrer Fahrtdetails (d. h. Start- und Zielpunkt, Startzeit, Kosten pro Fahrer usw.)
  • Andere Mitglieder können nach verfügbaren Fahrten zu einer Zielstadt suchen .
  • Mitglieder, die eine Fahrt suchen, können sich an den Eigentümer der Fahrt wenden und eine Reservierung vornehmen für ihre Plätze.
  • Der Eigentümer der Fahrt sollte Reservierungsanfragen genehmigen oder ablehnen können.
  • Basierend auf der Aktion, die der Mitfahreigentümer bei der Reservierungsanfrage ergriffen hat, sollte die Anzahl der verfügbaren Sitzplätze aktualisiert werden.
  • Der Mitfahreigentümer kann auch Städte auf der Strecke markieren, das sind Städte auf dem Weg von ihrem Startpunkt zu ihrem Ziel. Wenn sie es wünschen, sollen die Mitfahrgelegenheitsbesitzer auch in der Lage sein, Personen für Städte an der Strecke unterzubringen.

Lassen Sie uns unter Berücksichtigung dieser Parameter die wichtigsten Entitäten und Beziehungen für unser Fahrgemeinschaftsdatenmodell identifizieren.

Identifizieren von Entitäten und Beziehungen

Wenn ich die Anforderungen als Ganzes betrachte, kann ich die Hauptentitäten leicht erkennen. Sie sind:

  • Mitglieder (einschließlich Fahrerbesitzer und Mitreisende )
  • Auto
  • Einstellungen
  • reiten
  • Stadt
  • Fahranfrage

Mitglied – Jeder Besucher dieser Website muss sich vor der Nutzung registrieren. Dabei müssen sie Details wie first_name angeben , last_name , gender , email , und contact number . Für Mitreisende sind diese Gegenstände ausreichend. Besitzer von Mitfahrgelegenheiten, die vermutlich fahren werden, müssen einige zusätzliche Angaben wie driving_license_number machen und driving_license_valid_from sollten ebenfalls enthalten sein. Die Lizenzinformationen sagen Mitreisenden etwas über das Fahrerlebnis des Mitfahrers aus. Dies hilft den Mitreisenden, die beste verfügbare Fahrt auszuwählen. Ich füge eine Tabelle mit dem Namen member mit allen erforderlichen Spalten.

Auto – Der Eigentümer der Fahrt muss Details für mindestens ein Auto hinzufügen, bevor er eine Fahrt erstellen kann. Erstellen wir also eine weitere Tabelle mit dem Namen car , um diese Informationen zu speichern. Ein Mitglied kann mehr als ein Auto besitzen. Eine Fahrt kann von einem Mitgliedswagenpaar abhängen, daher benötigen wir eine weitere Tabelle, um diese Beziehung herzustellen. Wir nennen diese Tabelle member_car . Ich werde den Primärschlüssel dieser Tabelle in meinem ride Tabelle, in der ich Fahrdetails speichern werde. Ich werde auch eine Spalte hinzufügen, nämlich comfort_level , das das Komfortniveau eines Autos auf einer Skala von 0 bis 5 speichert. Dieses Niveau wird automatisch vom System berechnet, basierend auf den von anderen Mitgliedern bereitgestellten Details über das Auto.

Einstellungen – Vorlieben sind für alle wichtig. Auf der Website können Mitglieder ihre Präferenzen bezüglich des Autos und ihrer Mitreisenden eingeben. Diese Angaben bleiben zum Zeitpunkt der Registrierung optional, müssen aber ausgefüllt werden, bevor eine Fahrt erstellt wird . Der Mitfahrer wird wahrscheinlich nach Leuten mit ähnlichen Vorlieben suchen, damit alle bequem reisen. Menschen, die nach Mitfahrgelegenheiten suchen, tun dasselbe.

Einige grundlegende Präferenzen für Autoreisen sind:

  • Ist das Rauchen im Auto erlaubt?
  • Sind Haustiere erlaubt?
  • Wie gesprächig ist der Besitzer der Fahrt? Welches Maß an Geschwätz ist während der Fahrt akzeptabel? (Mögliche Antworten sind hier keine, leichtes Geplauder, Geschwätz.)
  • Welche Art von Musik mag der Besitzer der Fahrt?
  • Welche Musiklautstärke erlaubt der Mitfahreigentümer?

Da diese Angaben während der Registrierung optional sind, erstelle ich eine weitere Tabelle mit dem Namen member_preference um diese Daten zu speichern. Zwei zusätzliche Tabellen speichern mögliche Optionen für Musik (music_preference ) und Gespräche im Auto (chitchat_preference ).

Lassen Sie uns eine Null-zu-Eins-Beziehung zwischen member und member_preference Tabellen, da Mitglieder ihre Präferenzen bei der Anmeldung in das System eingeben können oder nicht, und es gibt nur einen Datensatz für Präferenzen pro Mitglied.

Stadt – Eine Haupttabelle, city , wird benötigt, um eine Liste aller Städte zu speichern, die von der Website bedient werden. Es sollte die relevanten Informationen zu Staat und Land für jede Stadt enthalten.

Fahren – Ein Mitglied kann eine Fahrt erstellen, indem es ausfüllt, mit welchem ​​Auto es fährt; von welcher Stadt er startet; welche Stadt er ansteuert; Datum und Uhrzeit der Fahrt; die Anzahl der verfügbaren Plätze; und Beitrag pro Kopf. Der Pro-Kopf-Beitrag ist der Betrag, den jeder Mitreisende an den Fahrtkosten zu entrichten hat. Der Mitfahrer kann auch angeben, wie viel Gepäck er von Mitreisenden erwartet, damit alles ins Auto passt. Also fügen wir eine Spalte hinzu, luggage_size_allowed , für diesen Artikel. Mögliche Werte für diese Spalte wären leicht, mittel und schwer.

Fahranfrage – Mitglieder können die Liste der verfügbaren Fahrten von einer Stadt zur anderen einsehen oder eine Anfrage für eine bestimmte Fahrt stellen. Wir brauchen definitiv eine Tabelle, um Details zu solchen Anfragen zu speichern. Eine Tabelle namens request passt zum zweck. Die Anfrage wird zunächst als „eingereichte“ Anfrage eingegeben, und der Mitfahreigentümer ist die einzige Person, die sie genehmigen oder ablehnen darf. Die Anzahl der verfügbaren Plätze in der Fahrtabelle wird für jede Genehmigung und/oder Ablehnung angepasst.

Städte unterwegs – Beim Mitfahren geht es nicht nur darum, direkt vom Startpunkt zum Ziel zu fahren. Man kann sich auch eine Fahrt mit anderen für Städte unterwegs teilen. Wenn zum Beispiel ein Mann von Chicago nach Miami reist, kann er jemanden unterbringen, der von Chicago nach Nashville fahren möchte. Nashville ist eine der Städte, die er auf seiner Route passieren wird, also ist es eine Stadt auf der Strecke. Unser System sollte es Mitfahreigentümern ermöglichen, Städte auf der Strecke basierend auf der Route festzulegen, der sie folgen, um ihr Ziel zu erreichen. Wenn Mitreisende möchten, können sie in jeder der Städte unterwegs aussteigen; ihre Reisekosten werden entsprechend anteilig berechnet.

Wir erstellen eine weitere Tabelle namens enroute_city für diesen Zweck. Aufzeichnungen werden hinzugefügt, wenn der Besitzer der Fahrt Städte auf der Strecke zu seiner Fahrt hinzufügt. Mitglieder können dann Reservierungen anfordern, um zu einer der Städte auf der Strecke zu reisen. Daher verweise ich den Primärschlüssel dieser Tabelle in den request Tisch.

Der order_from_source Spalte in enroute_city Tabelle gibt den Kurs an, dem der Mitfahrer für die Reise folgen wird.

Berichte auf der Website:

Auf dieser Website können verschiedene Reports (Datenauszüge) angezeigt werden. Lassen Sie mich einige davon erläutern:

  1. Fahrten von einer bestimmten Stadt zur anderen verfügbar – Dies ist einer der Berichte, die ziemlich häufig extrahiert werden, da er den Kern dieser Website darstellt. Die meisten Mitglieder greifen auf diese Website zu, um nach Reisealternativen oder Mitfahrgelegenheiten zu suchen. Beim Extrahieren dieses Berichts müssen die Mitglieder ihre Start- und Zielstädte eingeben. Die SQL folgt:

    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. Liste der eingereichten/genehmigten Anfragen für eine Fahrt – Dieser Bericht wird dem Mitfahreigentümer angezeigt. Es wird angezeigt, wer die Fahrtanfrage gesendet hat, und der Eigentümer kann nur auf Anfragen aus diesem Bericht reagieren. Das SQL dafür folgt:

    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. Frühere und aktuelle angebotene Fahrten – Diese Berichte werden den Mitfahrern auf ihren eigenen Dashboards angezeigt. Die folgende SQL kann verwendet werden, um eine Liste der Fahrten zu generieren, die der Eigentümer der Fahrt derzeit anbietet:

    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 = ;
    

    Und diese SQL kann verwendet werden, um eine Liste der früher angebotenen Fahrten zu extrahieren:

    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. Liste der Mitreisenden für eine Fahrt – Dieser Bericht steht allen Mitreisenden zur Verfügung, einschließlich dem Eigentümer der Mitfahrgelegenheit. Alle können eine Liste aller Mitreisenden für ihre vergangenen oder zukünftigen Fahrten erstellen.

    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 = ;
    

Das endgültige Datenmodell




Was ist mit Verbesserungen?

Können wir dieses Modell weiter verbessern? Ja wir können! Es gibt noch einige Bereiche, die erledigt werden müssen.

Was ist, wenn man wiederkehrende Fahrtanfragen erstellen möchte? Angenommen, ein Fahrer fährt jedes Wochenende von einer Stadt in eine andere und ist immer bereit, diese Fahrt zu teilen. Eine wiederkehrende Anfrage wäre bequemer.

Wie kann sich eine Person auf einen Unbekannten verlassen, der eine Mitfahrgelegenheit anbietet? Es sollte eine Möglichkeit geben, Menschen dabei zu helfen, andere zu bewerten, bevor sie eine Fahrt anfordern. Ein praktikabler Mechanismus besteht darin, Feedback über Mitfahrer und Mitreisende zu veröffentlichen und zu teilen. Diese Angaben helfen sicherlich anderen dabei, selbstbewusster eine Mitfahrgelegenheit bei Fremden zu buchen. Welche Änderungen sind dafür an unserem Datenmodell erforderlich?

Fühlen Sie sich frei, Ihre Beiträge zu diesem Modell zu teilen.