Klucze główne i dekompozycja do BCNF

0

Mam podaną relację Rejs(kod_oferty, skąd, dokąd, nr_lotu,pilot_pesel,pilot_imię,pilot_nazwisko, pilot_ilość_lotów,stewardessa_pesel,stewardessa_imię,stewardessa_nazwisko,stewardessa_ilość_lotów)
Do tej relacji mam dobrać klucze główne i sprawdzić są spełnione warunki BCNF, jeśli nie mam dokonać dekompozycji.

Myślałem trochę nad tym i doszedłem do wniosku że można to zrobić w ten sposób:

pilot([b]pilot_pesel[/b], pilot_imię, pilot_nazwisko, pilot_ilość_lotów)
stewardessa([b]stewardessa_pesel[/b], stewardessa_imię, stewardessa_nazwisko, stewardessa_ilość_lotów)
rejs([b]kod_oferty[/b], skąd, dokąd, [b]numer_lotu[/b], pilot_pesel, stewardessa_pesel)

Do takich relacji doszedłem na podstawie danych wejściowych z zadania:

('Lon_1', 'Kraków', 'Londyn', 1, '11110', 'Jan','Nowak', 12, '22220','Janina',Nowicka',21)
('Lon_1', 'Krakow', 'Londyn', 2, '11111', 'Piotr','Prix',39, '22221','Aleksandra','Czub','Czub',134)
('Lon_2', 'Warszawa', 'Londyn', 3, '11110', 'Jan','Nowak', '22222','Renata','Janik',56)
('Glas_1','Krakow', 'Glasgow', 4, '11111', 'Piotr','Prix',39, '22220','Janina','Nowicka',21)
('Glas_2','Warszawa', 'Glasgow', 5, '11110', 'Jan','Nowak', '22221','Aleksandra','Czub',134)
('Lon_2', 'Warszawa', 'Londyn', 6, '11110', 'Jan','Nowak', '22222','Renata','Janik',56)
('Ber_2', 'Katowice', 'Berlin', 7, '11112', 'Pawel','Maj',3, '22220','Janina','Nowicka',21)
('Lon_2', 'Warszawa', 'Londyn', 8, '11113', 'Michal','Wis',190, '22222',Renata,'Janik',56)

Wiem, że to nie jest związane z SQL-em jako takim ale mam nadzieję, że mi ktoś pomoże.
Chcę wiedzieć, czy dobrze dekomponowałem relację, jeśli nie to w jaki sposób można było to zrobić lepiej.

0

źle - pilot i stewardessa to po prostu osoba i powinni być w jednej tabeli, następnie z danych wynika, że nr_lotu jest unikalny w skali wszystkich lotów więc to on powinien być pk bez kod_oferty. Co więcej kod oferty jednoznacznie określa skąd dokąd jest rejs.

czyli mamy tak

pracownik
*pesel
typ_pracownika (pilot, stewardessa)
imie
nazwisko
ilosc_lotow
oferty
*kod_oferty
skad
dokad
rejs
*numer_lotu
#kod_oferty
#pilot_pesel
#stewardessa_pesel
    • klucz główny
    • klucz obcy

dodatkowo tabelę oferty można jeszcze tak rozbić

miasta
*miasto_id
miasto
oferty
*kod_oferty
#miasto_id_z
#miasto_id_do

rozbicie takie zmniejsza jlość przechowywanych danych, unika sytuacji, gdzie jeden rejs jest z Warszawa do Londyn a drugi z WARSZAWA do lonDYn, a w razie pomyłki w nazwie miasta zmienia się ją w jednym miejscu

1 użytkowników online, w tym zalogowanych: 0, gości: 1