MS Access Projektowanie c.d. i kwerendy Jeszcze kilka słów o projektowaniu Umiemy już (po poprzednich zajęciach) utworzyć pojedyncze tabele. Baza danych składa się jednak zazwyczaj nie z jednej a z większej ilości tabel połączonych ze sobą i spełniających warunki trzeciej postaci normalnej 1. Pierwsza postać normalna Dane w poszczególnych polach są niepodzielne (np. nie powinno być pola Imię_i_nazwisko tylko dwa osobne pola) oraz nie występuje wielowymiarowość (np. w tabeli faktura pola pozycja1, pozycja2, pozycja3 itp). Jedynym wyjątkiem od reguły w niektórych sytuacjach jest umieszczenie w tabeli dwóch pól opisujących podobne dane (imię, drugie_imię). Każda tabela ma określony klucz główny(tak jak to stwierdziliśmy na poprzednich zajęciach, jeśli żadne z pól tabeli nie może być kluczem głównym, to należy dodać takie pole typu autonumerowanie). Unikanie wielowymiarowości jest związane z rozdzieleniem tabel. W przykładzie z fakturą powinno się zaprojektować dwie osobne tabele: faktura i pozycje faktury połączone sprzężone ze sobą. (p. niżej) 2. Druga postać normalna Żaden podzbiór klucza głównego składającego się z wielu pól nie może sam stanowić klucza (+ pierwsza postać normalna). Najprostszym sposobem spełnienia tego postulatu jest zdefiniowanie wszędzie kluczy składających się z jednego pola. 3. Trzecia postać normalna Brak zależności przechodnich pomiędzy polami tabeli innymi niż klucz (+ druga postać normalna). Np jeżeli w tabeli plan zajęć mamy rekord z polami imię i nazwisko Andrzej Dudek to pole tytuł powinno zawierać dr. Zależności przechodnie powodują po pierwsze powtarzanie się danych (redundancję) po drugie są zagrożeniem dla integralności bazy, bo ta sama w jednym rekordzie może mieć inny tytuł a w drugim omyłkowo wpisany inny. Sposobem uniknięcia zależności przechodnich jest rozdzielenie tabel i utworzenie nowej tabeli z polami zależnymi przechodnio. Sprzężenia (relacje) Aby postulaty trzeciej postaci normalnej były spełnione należy w większości przypadków rozdzielić projektowaną tabele na szereg tabel połączonych. Możliwe jest to dzięki mechanizmowi sprzężeń błędnie nazywanych czasami relacjami). Sprzężenie to para pól (takich samych typów choć niekoniecznie o tej samej nazwie, przy czym typem odpowiadającym autonumerowaniu jest typ liczbowy podtyp liczba całkowita długa) w dwóch tabelach z których jedno pełni rolę klucza głównego w pierwszej tabeli. Pole w drugiej tabeli nosi nazwę klucza obcego. Przykładowo, jeśli tworzymybazę danych dotyczącą kolekcji płyt CD, to poprawnie zaprojektowana baza powinna rozdzielać informacje o samej płycie od informacji o utworach. Tabela Płyty mogłaby mieć następujące pola Id_płyty Wykonawca Tytuł Gatunek... 1 U2 Joshua Tree Rock 2 U2 Achtung Baby Rock 3 Kaliber 44 3:44 Hip-Hop 4 Cypress Hill Black Sunday Hip-Hop 5 Vavamuffin Vabang Reggae............ Natomiast tabela Utwory może zawierać: Id_Utworu Id_Płyty Tytuł Czas_odtw... 1 1 With or without you 2 1 I still haven t found 3 2 One 4 3 Wena 5 3 Konfrontacje 6 3 Masz albo myślisz o nich 7 3 Litery 8 4 I wanna get high 9 4 Insane In The Brain 10 5 Smokin in Jamaica 1
Tabele te są sprzężone polem Id_płyty, które w tabeli Płyty jest kluczem głównym a w tabeli Utwory kluczem obcym. Zwróć uwagę, że o ile wartości klucza głównego są unikalne, to wartości odpowiadającego mu w tabeli Utwory klucza obcego mogą się powtarzać. Można też zauważyć, że pole Id_płyty w tabeli Płyty jest najprawdopodobniej typu autonumerowanie, więc odpowiadające mu pole Id_płyty w tabeli Utwory jest typu Liczba podtyp Liczba całkowita długa. Interpretacja sprzężenia tabel w tym wypadku jest dość prosta. Utwór One pochodzi z płyty o id=2 czyli z płyty U2 Achtung Baby, utwór Wena z płyty o id=3 czyli z płyty Kalibra 44 3:44 a utwór Insane in the Brain z płyty Cypress Hill Black Sunday itd. Sprzężenie pomiędzy tabelami możemy przedstawić graficznie w następujący sposób: Tak. zaprojektowana baza nie jest jeszcze w trzeciej postaci normalnej (choć jest w drugiej). W następnym przykładzie spróbujemy znormalizować bazę, którą już wstępnie się zajmowaliśmy. Normalizacja case study Na końcu poprzednich zajęć utworzyłeś/ łaś tabelę Plan zajęć, która najprawdopodobniej wyglądała w sposób zbliżony do poniższego. Ta tabela nie jest w pierwszej postaci normalnej, gdyż po pierwsze trudno znaleźć pole, które byłoby kluczem głównym, po drugie pole prowadzący zawiera aż trzy składniki: tytuł, imię i nazwisko a tabela aby spełniać warunki 1 P.N. musi mieć wszystkie pola funkcjonalnie niepodzielne. Tak więc do tabeli zajęcia należy dodać pole id_zajęć typu autonumerowanie, które mogłoby zostać kluczem głównym i rozdzielić pole prowadzący. Tak zmieniona tabela spełniałaby postulaty pierwszej postaci normalnej. Ponieważ klucz składa się z jednego pola, więc tabela byłaby też w 2 P.N. 2
Zauważmy, że w tabeli powtarzają się zarówno dane o prowadzących jak i przedmiotach i sale. Żeby baza była poprawnie zaprojektowana należy te dane przenieść do osobnych tabel (Pracownicy, przedmioty i sale) 1. Należy również pamiętać, że baza dotyczy nie pojedynczego studenta ale wszystkich uczących się na naszym wydziale. Aby do uwzględnić dodajemy do bazy tabelę zapisy łączącą tabelę Zajęcia z tabelą Studenci. Przykładowo, jeśli w tabeli zapisy znalazłby się taki rekord: ID_zapisów nr_albumu ID_zajec 94470 491074 3552 oznaczałoby to, że student o numerze albumu 491074 zapisał się na zajęcia o identyfikatorze 3552 (czyli Rynek Papierów Wartościowych) Ostateczna więc struktura bazy prawie w trzeciej postaci normalnej mogłaby wyglądać następująco: 1 Może paść pytanie, dlaczego nie tworzymy dodatkowej tabeli np. dla dnia tygodnia. Wynika to z faktu, że lista wszystkim dni tygodnia jest stała a jej liczebność w przypadku studiów stacjonarnych wynosi 5. Stworzenie takiej tabeli nie byłoby oczywiście błędem, komplikowałoby jednak niepotrzebnie bazę danych nie przynosząc żadnych korzyści z punktu widzenia projektanta. 3
Uwaga techniczna: Sprzężenia są przedstawione jako linie, aby utworzyć sprzężenie wystarczy połączyć klucz główny z jednej tabeli z kluczem obcym drugiej tabeli (przeciągnąć odpowiednio pole z jednej tabeli do pola z drugiej tabeli). Usunięcie sprzężenia błędnie utworzonego to kliknięcie na nim i wybranie opcji Usuń. Sprzężenia mogą być tworzone w bazie zarówno globalnie (po naciśnięciu ikonki Relacje w oknie głównym bazy) jak i na potrzeby poszczególnych kwerend w ich siatkach projektowych. Zadanie: Ta baza jest w prawie trzeciej postaci normalnej. Wskaż miejsca, w których należałoby zmienić strukturę, żeby spełnione były wszystkie postulaty 3 P.N. Kwerendy - podstawy 1. Przekopiuj bazę danych Zapisy2017.mdb z andrzej.ue.jgora.pl na swój komputer. Otwórz bazę (hasłem do bazy jest skrót nazwy naszego Wydziału) i przejrzyj strukturę i zawartość tabel w niej się znajdujących. 2. Utwórz kwerendę wyświetlającą dane wszystkich studentów ze średnią większą niż 4,2 (kwerendy utwórz kwerendę w widoku projektu ) 3. Uruchom kwerendę poprzez ikonę Widok Arkusz Danych (pierwsza z lewej na pasku narzędzi) lub przez ikonę Uruchom (wykrzyknik) 4. Powróć do projektowania kwerendy (ikona widok projekt) Zmodyfikuj kwerendę, tak aby wyświetlała wszystkich studentów którzy mają średnią od 4,2 do 4,5 (kryterium dla średniej: >4,2 AND <4,5 ) i zapisz ją pod nazwą Studenci o wybranej średniej 5. Utwórz nową kwerendę wyświetlającą wszystkich studentów (płeć = "M" ) z drugiego lub piątego roku (rok =2 or =5) i zapisz pod nazwą Studenci 2,5 rok 6. Utwórz nową kwerendę na podstawie tabeli Przedmioty i wyświetl wszystkie przedmioty o nazwie (pole Przedmiot) zaczynającej się na literę "E". Do tego celu użyj symbolu *. Zapisz kwerendę pod nazwą przedmioty na E 7. Wyświetl wszystkie przedmioty, których nazwa składające się tylko z jednego wyrazu. 8. Access umożliwia tworzenie kwerend wyświetlających dane na podstawie więcej niż jednej tabeli. Możliwe jest to dzięki mechanizmowi sprzężeń (p. drugi akapit). Znajdź w tabeli Zajęcia klucz obcy z 4
tabeli Przedmioty(Id_przedmiotu) dla pierwszego rekordu i znajdź odpowiadający mu klucz główny (ID_przedmiotu)w tabeli Przedmioty. 9. Utwórz kwerendę wyświetlającą wszystkie zajęcia z przedmiotu Matematyka zgodnie z poniższą siatką: 10. Utwórz kwerendę wyświetlającą informacje o wszystkich zajęciach przeznaczonych dla studentów trzeciego roku 11. Znajdź w tabeli studenci nr albumu dowolnego studenta czwartego roku i dla tego numeru albumu wyświetl zajęcia na które faktycznie student jest zapisany czyli jego tygodniowy plan zajęć 2. 2 Numery albumów są w bazie zakodowane. Można jednak zwrócić się do prowadzącego zajęcia, aby podał kod odpowiadający konkretnemu numerowi albumu i w ten sposób sprawdzić swój plan zajęć. 5