Dla przykladu wezmy pod uwage system zawierajacy konta uzytkownikow, ktore mozna dowolnie przypisywac do grup. Istnieje takze mozliwosc wyslania wiadomosci e-mail do wybranej grupy.
Uproszczona struktura bazy danych to:
Tabela 'uzytkownik':
- id
- login
- id
- nazwa
W bazie danych znajduje sie jeszcze jedna tabela - zawiera ona informacje o przynaleznosci poszczegolnych uzytkownikow do grup.
Blednie zaprojektowana tabela bedzie wygladac nastepujaco:
Tabela 'uzytkownik_grupa':
- grupa_id
- uzytkownik_id
SELECT email FROM uzytkownik_grupa WHERE grupa_id = 7
Niestety, takie rozwiazanie ma powazne wady:
- informacja o adresie e-mail uzytkownika jest zduplikowana - podczas jej uaktualniania, nalezy ja zmienic w dwoch tabelach
- dane niepotrzebnie znajduja sie w drugiej tabeli - przez to zwieksza sie objetosc bazy danych
Rozwiazaniem probemu, jest zmiana struktury tabeli 'uzytkownik_grupa':
- grupa_id
- uzytkownik_id
SELECT u.email FROM uzytkownik as u, uzytkownik_grupa as ug WHERE u.id = ug.uzytkownik_id AND ug.grupa_id = 7
Takie rozwiazanie pozwala na redukcje ilosci zapytan do bazy danych w momencie aktualizacji adresu. Zapewnia takze, ze dane pobierane z bazy beda zawsze aktualne. Zmniejsza sie takze objetosc plikow z danymi w bazie - dzieki temu moze wzrosnac jej wydajnosc.
No comments:
Post a Comment