Jak zamienić ERD na relacyjna bazę danych.
- zbiór encji --> tabela
- związek między encjami --> tabela pomocnicza zawierająca klucze wszystkich zbiorów encji będących w tym związku
- związek binarny "wiele do jednego" --> tabela pomocnicza nie jest potrzebna (przykład:
związek "Zamówienia_czyje" między zbiorami encji "Zamówienia" i "Klienci")
Realizacja związku binarnego typu "wiele do wielu":
Rys 1
![](pwsb_b2.gif)
Realizacja związku binarnego typu "wiele do jeden":
Rys 2
![](pwsb_b3.gif)
(wyjaśnić dlaczego "id klienta" w tabeli Zamowienia_czyje nie powinien należeć
do klucza ...)
Zadanie 0
(ERD, ERD -> tabelki)
- Zaprojektuj diagram ERD dla magazynowej bazy danych
(bierzemy pod uwagę zbiory encji: Zamowienia, Klienci, Towary).
- Przetwórz go na tabele modelu relacyjnego.
Zadanie 0a
(ERD, ERD -> tabelki)
Wprowadź możliwość klasyfikowania towarów wg kategorii (dodaj zbiór encji
Kategorie).
Założenie: do jednej kategorii może należeć wiele towarów, ale i
jeden towar może przynależeć do wielu kategorii równocześnie !.
Przetwórz zmodyfikowany ERD na tabele modelu relacyjnego.
Program MS Access.
Baza danych Access-u jest przechowywana w jednym pliku z rozszerzeniem mdb.
Klasy obiektów.
![](pwsb_b1.gif)
- tabele
- w tabelach przechowuje się dane (które są później przetwarzane na
użyteczne informacje przy pomocy kwerend)
- dla każdej tabeli definiuje się pola (ich nazwy i typy)
- można też zdefiniować podstawowe więzy; np dziedziny pól, klucz,
więzy jednoznaczności, ...
- można także zdefiniować indeksy (jedno i wielo polowe)
- kwerendy
- kwerendy czyli zapytania w postaci graficznej QBE i w języku SQL;
- Uwaga: w Accesie nie trzeba
koniecznie znać języka SQL gdyż można tworzyć kwerendy przy pomocy siatki
projektowej (czyli w języku QBE) i są one automatycznie tłumaczone na SQL !
- do siatki projektowej kwerend wprowadza się tabele
- będzie obliczany iloczyn kartezjański wprowadzonych tabel
- należy (można) połączyć myszą pola złączające tabele jeśli ma to być
złączenie naturalne
- wybiera się które pola chcemy zobaczyć ("Pole:", "Pokaż:")
- wybiera się które wiersze chcemy zobaczyć ("Kryteria:", "lub:")
- w polu kryteria wpisuje się konkretne wartości (metoda QBE = Query By
Example),
- lub wpisuje się warunki typu
>10
>= #1/10/2003#
>= "Adam" (ostatnie w sensie kolejności alfabetycznej)
- można też wpisywać dowolne wyrażenia logiczne, np:
[imie i nazwisko]="Jan Kowalski1" Or [imie i nazwisko]="Jan
Kowalski10"
- warunki wpisane w tej samej linii kryteriów są połączone spójnikiem
logicznym "i"
- warunki wpisane w różnych liniach są połączone spójnikiem logicznym "lub"
- formularze
- ułatwiają wprowadzanie/oglądanie/modyfikowanie danych;
- formularz jest zawsze
oparty na jednej tabeli lub kwerendzie !
- formularz zawiera kontrolki które są powiązane z polami tabeli na której
formularz jest oparty i pokazują wartości pól bieżącego rekordu tej tabeli
- raporty
- podobne do formularzy; służą do drukowania
- strony
- dostęp poprzez strony WWW
- makra
- proste procedury składające się z elementarnych akcji
- moduły
- biblioteki procedur w VBA (=Visual Basic for Application)
Obiekty.
Access jest "oparty na obiektach" w szerokim tego słowa znaczeniu;
obiektami są: tabele, pola tabel, kwerendy, formularze, kontrolki na
formularzach, ...
Każdy obiekt posiada:
- właściwości -
są to zmienne posiadające nazwę i wartość;
np kontrolka na formularzu (inaczej formant) jest obiektem i posiada
"właściwość" o nazwie "Nazwa", która to właściwość zawiera nazwę kontrolki; ma
też właściwość o nazwie "Źródło formantu" która zawiera nazwę pola tabeli z
którym kontrolka jest związana
- metody -
są to procedury które można wywoływać na rzecz obiektu
- obiekty posiadają także:
- procedury obsługi zdarzeń
np co ma się dziać po naciśnięciu guzika na formularzu
- kolekcje innych obiektów
istnieje hierarchia obiektów ("kto kogo posiada"); np
formularz posiada swoje kontrolki
Access/ tabele.
W tabelach przechowuje się dane (fakty), które są później przetwarzane na
użyteczne informacje przy pomocy kwerend.
Aby zdefiniować nową tabelę trzeba:
- wybrać klasę obiektów "tabele"
- nacisnąć guzik "Nowy"
- wybrać "Widok projektu"
Podczas definiowania tabeli określa się pola
tabeli, tj dla każdego pola definiuje się:
- nazwę pola
- typ pola
- pozostałe właściwości pola (w dolnej części siatki projektowej)
Można także określić:
- klucz tabeli (trzeba to zrobić !)
- indeksy
Na końcu trzeba tabelę zapisać pod określoną nazwą.
|
Okienko
"tabele" może być otwarte w dwóch trybach (czyli "Widokach"):
- Widok projektu - służy do definiowania tabeli (w tym trybie jest dostępne
okienko "Indeksy")
- Widok arkusza danych - służy do wprowadzania danych do tabeli
Między widokami przełączamy się guzikiem "Widok".
Więzy
definiuje się w Access-ie podczas definiowania tabeli oraz w okienku "Relacje"
(patrz zadanie 1).
Oto tabela w "Widoku
projektu" (tzw siatka projektowa):
![](pwsb_b47.gif)
Oto tabela w "Widoku arkusza danych" :
![](pwsb_b48.gif)
Zadanie 1
(ERD, ERD -> tabelki, Access: def tabel, więzy integralności, wprowadzanie
danych)
- zaprojektować diagram ERD dla magazynowej bazy danych
(bierzemy pod uwagę zbiory encji: Zamowienia, Klienci, Towary)
- przetworzyć go na tabele modelu relacyjnego
- zdefiniować tabele w Accesie, i wprowadzić dane tak jak na poniższym
obrazku
- zdefiniować więzy integralności referencyjnej między tabelami
Towary-Zamówienia i Klienci-Zamówienia;
w tym celu trzeba :
- otworzyć okienko "Relacje"
- połączyć pary pól złączające tabele
- włączyć opcję "Wymuszaj więzy integralności";
warto także włączyć "Kaskadowo aktualizuj
..." i "Kaskadowo usuń ..."
- spróbuj złamać więzy integralności referencyjnej; w tym celu spróbuj dodać
zamówienie z prawidłowym [id towaru] ale z nieistniejącym [id klienta]
- wypróbuj działanie kaskadowego usuwania rekordów !; w tym celu usuń
pewnego klienta i zaobserwuj czy wszystkie jego zamówienia automatycznie
znikną
Uwaga 1: rozmaite
więzy
(klucze, integralność referencyjna, więzy jednoznaczności i inne) mogą być "wbudowane"
w tabele w czasie definiowania tabel. Więzy nakłada się na tabele żeby
wymusić by dane w tabelach spełniały pewne warunki ... |
Uwaga 2: integralność referencyjna w relacyjnej b.d.
występuje zawsze między parą tabel:
- tabelą główną (np tabela Klienci)
- tabelą podrzędną (tą która zawiera "klucz obcy"; np tabela Zamowienia)
W Access-ie integralność referencyjną ustala się w okienku "Relacje" (patrz Zadanie 1);
- nałożenie więzów integralności referencyjnej (np między tabelami
Klienci i Zamowienia) oznacza ze:
- nie da się zmodyfikować klucza obcego w tabeli Zamowienia tak aby
wskazywał na nieistniejącego klienta
- nie da się usunąć klienta który ma jakieś zamówienia
- innymi słowy: nie da się wykonać żadnej modyfikacji która by łamała
więzy integralności referencyjnej
- opcja "Kaskadowo usuń .." oznacza że usunięcie klienta
będzie możliwe ale pociągnie za sobą automatycznie usunięcie wszystkich
jego zamówień
- opcja "Kaskadowo aktualizuj .." oznacza że modyfikacja klucza klienta (gdyby
była możliwa) pociągnie za sobą modyfikację klucza obcego w tabeli
Zamowienia
|
![](pwsb_b1.jpg)
Zamiana ERD na relacyjną b.d. - ciąg dalszy.
Przypomnijmy że więzy to "narzędzia"
pozwalające wymusić aby dane w relacyjnej b.d. spełniały pewne warunki ...
Niektóre więzy (np klucze) zaznacza się już w fazie projektowania, na
diagramach ERD,
inne wprowadza się dopiero w bazie danych (podczas definiowania tabel).
więzy typu ... |
realizuje się w Accesie poprzez ... |
klucze |
klucze (być może wielopolowe !);
ustanawiane podczas def tabeli |
więzy jednoznaczności |
indeksy unikatowe (być może wielopolowe !);
ustanawiane podczas def tabeli |
więzy integralności referencyjnej |
okienko "Relacje" |
więzy domenowe |
typ pola;
właściwość pola "Reguła spr. poprawności";
ustanawiane podczas def tabeli |
więzy zasadnicze |
właściwość tabeli "Reguła spr. poprawności";
ustanawiane podczas def tabeli |
Zadanie 1a
(Dygresja: jak wprowadzać więzy zasadnicze w Access-ie ?)
Utwórz tabele "tabela1" z polami typu liczba, o nazwach p1,p2,p3; nałóż
na tabelkę więzy zasadnicze następującej postaci "p1 <> p2" (trzeba wpisać
[p1]<>[p2] do właściwości "Reguła spr. poprawności" tabeli), następnie spróbuj
wprowadzić dane do tabeli łamiące te więzy ...
Uwaga: Jednym z warunków jakie chcielibyśmy wymusić jest typ związku między
encjami
("jeden do jednego", "wiele do jednego", "wiele do wielu").
Jak wymusić typ związku (przy pomocy kluczy) ?.
Związek binarny typu "wiele do jeden":
Rys 2
![](pwsb_b3.gif)
Związki 3 argumentowe typu "wiele do wielu":
Rys 3
![](pwsb_b4.gif)
Związki 3 argumentowe typu "wiele do jednego":
Rys 4
![](pwsb_b5.gif)
Związki 3 argumentowe typu "wiele do jednego" (trochę
inny):
Rys 5
![](pwsb_b52.gif)
Uwaga: w tym wypadku można w oczywisty sposób uprościć tabele: usunąć
tabele pomocniczą X, a do tabeli A dodać pola (klucze obce) id_B i id_C !.
Ogólna zasada wymuszania typu związku w związkach
"wiele do jednego":
w tabeli pomocniczej: pole odpowiadające krawędzi ze strzałką NIE należy do
klucza tej tabeli
|
Ogólna zasada "upraszczania" tabelek otrzymywanych
z ERD:
jeśli dany związek (między encjami) ma dokładnie jedną krawędź BEZ strzałki, to
tabela pomocnicza dla tego związku nie jest potrzebna; można umieścić wszystkie
klucze obce w tabeli (reprezentującej zbiór encji) odpowiadającej krawędzi bez strzałki
|
Zadanie 2
Mamy następujące zbiory encji:
- Filmy (id filmu, tytuł, rok)
- Aktorzy (id aktora, nazwisko i imię, adres, telefon)
- Kontrakty (id kon, wynagrodzenie)
1. narysuj diagram ERD; wprowadź odpowiednie związki (w jak największym
stopniu zgodne z rzeczywistością !);
2. zamień ERD na tabele relacyjnej b.d.; zapewnij aby nie można było podpisać 2
kontraktów dla tego samego filmu i aktora.
Zadanie 3
Mamy następujące zbiory encji:
- Magazyny (id mag, adres)
- Towary (id tow, nazwa, cena)
- Lokalizacje (id lok, regał, półka, pudełko)
Założenie: w jednym pudełku przechowuje się wyłącznie jeden
towar (ale oczywiście wiele sztuk tego towaru).
1. narysuj diagram ERD; wprowadź odpowiednie związki (w jak największym
stopniu zgodne z rzeczywistością !);
2. zamień ERD na tabele relacyjnej b.d.
Zadanie 4
Dla następujących diagramów zdefiniuj tabele:
![](pwsb_b6.gif)
Zadanie 5
(W programie MS Access)
W "magazynowej bazie danych" (bd02.mdb)
zabroń wpisywania dwa razy tego samego zamówienia (tj dla tego samego
klienta, towaru i z tą samą datą) przy pomocy odp więzów.
Wskazówki:
użyj więzów jednoznaczności (unikatowych indeksów
wielopolowych);
indeksy te definiuje się w okienku "Indeksy":
Jeśli dane nie spełniają warunku który chcemy wymusić to trzeba będzie je
zmodyfikować !.
Uwaga: przypominam że okienko
"tabele" może być otwarte w dwóch trybach ("Widokach"):
- Widok projektu - służy do definiowania tabeli (w tym trybie jest dostępne
okienko "Indeksy")
- Widok arkusza danych - służy do wprowadzania danych do tabeli
Między widokami przełączamy się guzikiem "Widok".