• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Projekt bazy danych - Obsługa pasażera w systemie rezerwacji biletów lotniczych

Object Storage Arubacloud
0 głosów
3,476 wizyt
pytanie zadane 21 października 2017 w Nasze projekty przez Kuba Kapusta Nowicjusz (120 p.)

Wykonałem projekt bazy danych w Power Designer o temacie Obsługa pasażera w systemie rezerwacji biletów lotniczych. Moim zadaniem były tylko i wyłącznie stworzenie odpowiednich encji (bez atrybutów) i powiązań między nimi. Zadanie podlegało następującym wymaganiom:

 

Założenia biznesowe:

 

  1. Pasażer może mieć możliwość wyboru miejsca, klasy podróży, jak i deklaracji bagażu rejestrowanego dopiero wtedy, gdy jego płatność zostanie zaksięgowana.
  2. Pasażer w ramach lotu nie ma obowiązku deklaracji bagażu rejestrowanego.
  3. We flocie linii lotniczej nie każdy samolot może posiadać te same klasy podróży i taką samą liczbę miejsc.
  4. W ramach 1 rezerwacji pasażer może zarezerwować liczbę lotów większą lub równą 1.

 

Procedura rezerwacji i kupna biletu:

 

Pasażer dokonuje rezerwacji w ramach systemu, która zostaje potwierdzona przez dokonanie płatności. Pasażer posiada preferencje, które może określić w ramach rezerwacji np. wybrać klasę podróży oraz zadeklarować bagaż rejestrowany. Dana klasa podróży zapewnia konkretne miejsca w samolocie. Istotną kwestią jest to, że nie każdy samolot oferuje te same miejsca na pokładzie oraz te same klasy podróży. W ramach rezerwacji linia lotnicza realizuje lot zaczynający się na lotnisku wylotu, a kończący się na lotnisku przylotu. Lot ten jest obsługiwany przez samolot wchodzący w skład floty linii lotniczej.

 

image image Diagram ERD:

Zwracam się pytaniem, czy utworzone przeze mnie powiązania w diagramie ERD są odpowiednie?

 

Z góry dziękuję za odpowiedzi.

Pozdrawiam,

Kuba

2 odpowiedzi

0 głosów
odpowiedź 21 października 2017 przez pulson666 Stary wyjadacz (12,560 p.)
Bardzo ładnie wygląda :) i faktycznie jest ok
0 głosów
odpowiedź 21 października 2017 przez Tomek Sochacki Ekspert (227,510 p.)
Taka mała sugiestia, zakładasz, że jeden lot ma tylko jedno lotnisko wylotu i odlotu. Zakładam więc, że w przypadku lotu z przesiadką zrobisz dwie rezerwacje dla jednego klienta, np. od A do B i od B do C? Mamy więc pewien problem z płatnościami (ale do rozwiązania). Tak samo jeden lot ma jeden samolot, co przy przesiadkach nie jest prawdą.

I druga kwestia, nawet jeśli mamy lot bezprzesiadkowy to może wystąpić międzylądowanie, czyli na cały lot jest jeden samolot ale kilka lotnisk start-end. Masz jakiś pomysł na rozwiązanie tego w tej bazie?

Trochę wydaje mi się, że za bardzo boisz się relacji wiele-do-wielu, które często są bardziej elastyczne. Nie oznacza to potem wcale trudniejszych zapytań, wystarczy porobić na bazie np. odpowiednie widoki i do nich się potem odwoływać.
komentarz 21 października 2017 przez Kuba Kapusta Nowicjusz (120 p.)
Założyłem, że ta linia lotnicza oferuje tylko loty bezpośrednie, a o międzylądowaniach mówiąc szczerze nie myślałem. Mam natomiast pytanie dotyczące tego czy mogę pozostawić 2 encje - LOTNISKO_WYLOTU oraz LOTNISKO_PRZYLOTU, czy może zamiast tego utworzyć jedną encję - LOTNISKO. Pytam z tego względu, ponieważ gdybyśmy mieli spojrzeć na fizyczne obiekty w rzeczywistości, to zarówno LOTNISKO_WYLOTU oraz LOTNISKO_PRZYLOTU to ten sam obiekt. Która opcja jest rozsądniejsza i bardziej zgodna z zasadami projektowania diagramów ERD?
komentarz 21 października 2017 przez Tomek Sochacki Ekspert (227,510 p.)

Z lotniskiem masz rację, lepsze jedno. Natomiast co do lotów bezpośrednich to powiem tak, ja byłem uczony że jeśli w bazach danych istnieje ryzyko, że jakaś sytuacja się może zdarzyć, to znaczy że wcześniej czy później na pewno się zdarzy i warto się odpowiednio zabezpieczyć. A jeśli robisz tak sztywne i wąskie założenia to warto to dobrze przemyśleć.

Wbrew pozorom przy większych aplikacjach stworzenie bazy to spory problem, a wiele ludzi zbyt mocno lekceważy etap planowania funkcjonalności - jest taka stara książka Case Mehtod. Sam kiedyś dostałem ją od taty, który uczył się z niej podstaw planowania (w sumie to jest tam nawet przykład związany z lotniskiem z tego co pamiętam :D) i wg mnie jest to jedna z lepszych książek dla programistów, mimo że nie ma w niej ani jednej linijki kodu... ale porusza tematy, o których dzisiaj się mało mówi...

komentarz 21 października 2017 przez Kuba Kapusta Nowicjusz (120 p.)
Wracając jeszcze do encji LOTNISKO - jak utworzę jedną encję LOTNISKO, to i tak będę musiał utworzyć jeszcze jedną, która będzie zawierała ID_LOTNISKA_STARTOWEGO jak i ID_LOTNISKO_KOŃCOWEGO, więc czy jest sens?
komentarz 21 października 2017 przez Tomek Sochacki Ekspert (227,510 p.)
A gdybyś miał tabelę pośrednią: id_lotniska, id_rezerwacji, typ (start, end) ?
komentarz 22 października 2017 przez Kuba Kapusta Nowicjusz (120 p.)

Procedura rezerwacji i kupna biletu:

Pasażer dokonuje rezerwacji w ramach systemu, która zostaje potwierdzona przez dokonanie płatności. Pasażer posiada preferencje, które może określić w ramach rezerwacji np. wybrać klasę podróży oraz zadeklarować bagaż rejestrowany. Dana klasa podróży zapewnia konkretne miejsca w samolocie. Istotną kwestią jest to, że nie każdy samolot oferuje te same miejsca na pokładzie oraz te same klasy podróży. W ramach rezerwacji linia lotnicza realizuje lot, który odbywa się na trasie wybranej podczas rezerwacji. Lot obejmuje podróż w ramach dwóch lotnisk. O tym, które lotnisko jest startowe, a które docelowe świadczy trasa lotu. Lot ten jest obsługiwany przez samolot wchodzący w skład floty linii lotniczej.

Teraz jest w porządku?

komentarz 23 października 2017 przez Tomek Sochacki Ekspert (227,510 p.)

Pasażer dokonuje rezerwacji w ramach systemu, która zostaje potwierdzona przez dokonanie płatności. Pasażer posiada preferencje, które może określić w ramach rezerwacji np. wybrać klasę podróży oraz zadeklarować bagaż rejestrowany. Dana klasa podróży zapewnia konkretne miejsca w samolocie. Istotną kwestią jest to, że nie każdy samolot oferuje te same miejsca na pokładzie oraz te same klasy podróży. W ramach rezerwacji linia lotnicza realizuje lot, który odbywa się na trasiewybranej podczas rezerwacji. Lot obejmuje podróż w ramach dwóch lotnisk. O tym, które lotnisko jest startowe, a które docelowe świadczy trasa lotu. Lot ten jest obsługiwany przez samolot wchodzący w skład floty linii lotniczej.

W zły sposób zabierasz się do problemu projektowania bazy i całej aplikacji. Nie myśl w ten sposób, tylko prostymi, krótkimi historyjkami w stylu:

  1. Chcę móc kupić bilet na lot.
  2. Pasażer może wybrać miejsce w samolocie.
  3. Pasażer może wybrać klasę podróży.
  4. Pasażer może posiadać bagaż podręczny.
  5. Pasażer może posiadać bagaż dodatkowy.

itp. itd. Oczywiście nie sugeruj się nimi dosłownie, są pisane na szybko, żeby pokazać Ci różnicę. W takim rozwiązaniu łatwiej tworzyć zarówno samą bazę jak i potem aplikację - myślisz o pojedynczych funkcjonalnościach, a nie od razu o całym systemie.

komentarz 23 października 2017 przez Kuba Kapusta Nowicjusz (120 p.)

Rozumiem. Mój opis wynika z tego, że taki jest wymóg mojej pracy domowej - mają być wyróżnione wszystkie pojęcia składające się na system i wszystkie powiązania między nimi. Mam pytanie natomiast, czy połączenia między trasa - lotnisko oraz trasa - rezerwacja są w porządku - oczywiście przy założeniu, że tabela TRASA miałaby atrybuty  id_lotniska, id_rezerwacji, typ (start, end)?

Podobne pytania

0 głosów
0 odpowiedzi 265 wizyt
pytanie zadane 19 listopada 2022 w Python przez AndiWoj Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 353 wizyt
0 głosów
0 odpowiedzi 228 wizyt
pytanie zadane 25 czerwca 2018 w Rozwój zawodowy, nauka, praca przez PR3C3L Początkujący (270 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...