45
PODSTAWY BAZ DANYCH
narusza reguły drugiej postaci normalnej. Zmiana wartości kolumny ID_Leka-rza nie pociąga za sobą zmian wartości Nazwa_spec jalizac ji, której wartości powtarzają się wielokrotnie.
Tak zaprojektowana tabela stwarza jednak pewne problemy.
Nazwa specjalizacji będzie powtarzać się wielokrotnie w kolejnych krotkach dla wszystkich lekarzy, których specjalizacje już raz wystąpiły. W wypadku wstawiania kolejnego lekarza z bardziej skomplikowaną nazwą specjalizacji będziemy musieli mieć gwarancję, że wpiszemy ją poprawnie, inaczej baza danych może zwrócić błędne wyniki. Przykładowo, dla specjalizacji neonatologia wystarczy, że osoba wpisująca dane użyje zamiennika: chirurg_dziecięcy (co oznacza to samo), a baza danych potraktuje to jako dwie odrębne specjalizacje za każdym razem, gdy zostaną błędnie wprowadzone (wliczając literówki).
Aby uczynić zadość założeniom drugiej postaci normalnej, należy informacje z przedstawionej tabeli podzielić pomiędzy dwie tabele, w których nienależące do klucza kolumny zależeć będą od kluczy głównych w nowo powstałych tabelach. Zakładamy, że każdy z lekarzy będzie zatrudniony jako pracownik o pojedynczej specjalizacji (przedstawiony poniżej związek wiele do jednego - ponieważ może pracować kilku lekarzy o tej samej specjalizacji). Jeśli każdy z lekarzy mógłby mieć więcej niż jedną specjalizację, związek pomiędzy tabelami należałoby zmodyfikować jako wiele do wielu - wprowadzając tabelę walidacyjną.
Idjekarza (klucz_podstawowy) |
Id.specjalizacji (klucz.podstawowy) |
Nazwisko. lekarza |
Id.specjalizacji (klucz.podstawowy) |
Nazwa. specjalizacji | |
1 |
1 |
Nowak |
1 |
internista | |
2 |
1 |
Lubicz |
Z |
2 |
kardiolog |
3 |
2 |
Burski |
3 |
neurolog \ | |
i--------------------------------------------------------------------------------- 4 |
3 |
Kowalska |
Rys. 9.6. Związek jeden do wielu (wiele do jednego) - jedna specjalizacja, którą może mieć wielu lekarzy