relacje - czy dobre?

0

Witam. Główkowałem się ze zrobieniem odpowiedniej relacji, tak aby w późniejszym czasie funkcjonowało to tak jak chcę. Zrobiłem jedno połączenie, ale chcę wiedzieć czy jest ono dobre, aby później nie mieć problemów przez błąd w samej bazie danych.

W tej chwili istnieją takie dwie tabele:

CREATE TABLE kierowcy
(
    id_kierowcy INT NOT NULL AUTO_INCREMENT,
    imie_kierowcy TEXT NOT NULL,
CONSTRAINT id_kierowcy_pk PRIMARY KEY (id_kierowcy)
)
CREATE TABLE zespol
(
    id_zespolu INT NOT NULL AUTO_INCREMENT,
    nazwa_zespolu TEXT NOT NULL,
    kierowca1 INT NOT NULL,
    kierowca2 INT NOT NULL,
CONSTRAINT id_zespolu_pk PRIMARY KEY (id_zespolu)
)

Planem jest, aby wpis kierowca1 oraz kierowca2 był kluczem obcym powiązanym z tabelą kierowcy. W późniejszych planach tworzenia "projektu" planuję zrobić, aby kierowca1 nie mógł być identyczny jak kierowca2.
Zrobiłem takie połączenie:

alter table zespol add foreign key (kierowca1) references kierowcy(id_kierowcy);
alter table zespol add foreign key (kierowca2) references kierowcy(id_kierowcy);;

Jeśli ktoś może potwierdzić, że powiązania są dobrze wykonane, będę wdzięczny :)
Jeśli są źle, proszę nie krytykować tylko nakierunkować ;)

1
  1. czemu nazwa_kierowcy i nazwa_zespolu to TEXT?
  2. widzę, że baza to MySQL, więc nie zrobisz na poziomie bazy (tak zaprojektowanej) sprawdzania, czy kierowca1<>kierowca2. Wprawdzie MySQL ma klauzulę CHECK, ale... ona nie działa.
  3. Jeśli chcesz mieć na poziomie bay sprawdzanie + kilka innych udogodnień, to zrób dodatkową tabelę:
    kierowcy_zespol
    (
    id,
    id_zespolu,
    id_kierowcy
    )
    i na to możesz już zrobić UNIQUE (id_zespolu, id_kierowcy)
  4. Klucze obce do takiej postaci tabeli są OK.
0
  1. tak się uczyłem robić wpisy dla tekstowych znaków, czy powinno być varchar, skoro np. będzie tam wpisane imię "ADAM"?
  2. porównanie kierowca1<>kierowca2 będzie już w php i html, nie mysql, baza ma tylko przechowywać wartości

skoro klucze są ok, to super, dzięki za odpowiedź :)

//edit
zapytam, dla zapisanych haseł jaki najlepiej dać typ danych, skoro już o tym mowa?

0

Uwaga kosmetyczna - tabela zespol chyba powinna się nazywać zespoly.
Inna uwaga - czemu zespół ma dwóch kierowców? Może w przyszłości będzie ich trzech? Będziesz wtedy musiał rozbudowywać tabelę. Może powinna być tabela kierowcy_zespolow, która by wiązała zespół z kierowcą? Wtedy łatwo można by było założyć unikatowość na wartościach zespół - kierowca.

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