skanuj0247 (3)

skanuj0247 (3)



260 PHP i MySQL dla każdego

Tabela Autorzy ma zatem pola: Autorld, Imię, Nazwisko, natomiast tabela Książki cztery: Książkald, Tytuł, Autorlld, Autor2Id, Autor3Id. Takie rozwiązanie, choć spotykane w praktyce, ma jednak wiele wad i należy go zdecydowanie unikać. Po pierwsze większość książek ma tylko jednego autora, a zatem w większości przypadków pola Autor2Id i Autor3Id pozostaną puste. Takie puste pola mogą nam potem sprawić trochę kłopotów przy obsłudze bazy. Po drugie może się zdarzyć sytuacja wyjątkowa, kiedy to jakaś książka będzie miała więcej niż trzech autorów i wtedy nie będziemy w stanie zapisać ich wszystkich w bazie. Dlatego też w przypadku wystąpienia relacji wiele do wielu należy stosować dodatkową tabelę pomocniczą łączącą tabele, między którymi relacja występuje. Prawidłowe rozwiązanie jest zatem takie, jak na rysunku 9.23.

Autorzy

KsiążkiAutorzy

Książki

Autorld

Książkald

Książkald

Imię

Autorld

Tytuł

Nazwisko


Rysunek 9.23.

Prawidłowe rozbicie relacji wiele do wielu na trzy tabele

Tabela Autorzy ma taką samą postać, jak w poprzednim przypadku, natomiast tabela Książki tym razem ma tylko dwa pola: Książkald (które będzie przechowywać unikalny identyfikator) oraz Tytuł. Za połączenia autorów i książek odpowiada natomiast całkiem nowa tabela, o nazwie Książki Autorzy. Ma ona dwa pola, w pierwszym polu — Książkald — zapisywane są identyfikatory książek z tabeli Książki (jest to więc klucz obcy), w drugim polu — Autorld — zapisywane są identyfikatory autorów z tabeli Autorzy (a zatem to również jest klucz obcy). Dzięki takiemu układowi możemy bez problemu odzwierciedlić sytuacje, kiedy jeden autor napisał wiele książek i kiedy jedna książka ma więcej niż jednego autora. Taka przykładowa sytuacja została przedstawiona na rysunku 9.24. Zwróćmy także uwagę na to, że w tabeli KsiążkiAutorzy obie kolumny zawierają klucze obce, a zatem obie razem będą stanowić klucz podstawowy (o ile dane w tabeli nie zawierają błędów, para Książkald, Autorld jednoznacznie wyznacza dany wiersz tabeli KsiążkiAutorzy).

Rysunek 9.24.

Autorld

Imię

Nazwisko

1

2

Orson Scott Kathryn

Card

Kidd


Książką Id

Tytuł

1

Gra Endera

2

Lovelock

3

Paradise Vue


KsiążkiAutorzy

Ksiażkald

Autorld

1

2

1

1

2

2

3

2


Baza książek i autorów zawierająca przykładowe dane

Widać wyraźnie, że bazie zapisano dane dwójki autorów: Orsona Scotta Carda2 oraz Kathryn Kidd3 (tabela Autorzy) oraz trzech książek: Gra Endera, Lovelock i Paradise Vue

' Godne rozważenia może być to, jak postępować w sytuacji, kiedy autor posługuje się dwoma imionami.

Czy zapisywać je oba, w jednej kolumnie, tak jak w przedstawionym przykładzie (zmieniając ewentualnie __ nazwę kolumny na Imiona), czy też zastosować inne rozwiązanie?

J Dokładniej Kathryn Helms Kidd, w polskim wydaniu książki Lovelock błędnie wydrukowano nazwisko Kathryn Kerr.


Wyszukiwarka

Podobne podstrony:
skanuj0255 (3) 268 PHP i MySQL dla każdego Tabela 9.1. Wartości parametru prawa polecenia GRANT Nazw
41918 skanuj0388 (3) 404 PHP i MySQL dla każdego Tabela 15.1. Dopuszczalne wartości parametru Typ
19684 skanuj0380 (2) 398 PHP i MySQL dla każdego Tabela ta zostanie utworzona za pomocą instrukcji S
71416 skanuj0036 (105) PHP i MySQL dla każdego Tabela 2.6. Operatory bitowe Operator Wykonywane
36926 skanuj0309 (2) 324 PHP i MySQL dla każdego Tabela 11.2. Typy tabel w MySQL Nazwa typu Opis
30484 skanuj0460 (2) 478 PHP i MySQL dla każdego Do nawiązania połączenia jest wykorzystywana funkcj
skanuj0165 (11) 176_PHP i MySQL dla każdego Tabela 6.3. Znaczniki formatujące dla funkcji

więcej podobnych podstron