Jak zamienić ERD na relacyjna bazę danych.

Realizacja związku binarnego typu "wiele do wielu":
Rys 1

Realizacja związku binarnego typu  "wiele do jeden":
Rys 2

(wyjaśnić dlaczego "id klienta" w tabeli Zamowienia_czyje nie powinien należeć do klucza ...)
 

Zadanie 0


(ERD, ERD -> tabelki)
  1. Zaprojektuj diagram ERD dla magazynowej bazy danych
    (bierzemy pod uwagę zbiory encji: Zamowienia, Klienci, Towary).
  2. 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.

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:

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:

  1. wybrać klasę obiektów "tabele"
  2. nacisnąć guzik "Nowy"
  3. 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"):

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):


Oto tabela w "Widoku arkusza danych" :



Zadanie 1


(ERD, ERD -> tabelki, Access: def tabel, więzy integralności, wprowadzanie danych)
  1. zaprojektować diagram ERD dla magazynowej bazy danych
    (bierzemy pod uwagę zbiory encji: Zamowienia, Klienci, Towary)
  2. przetworzyć go na tabele modelu relacyjnego
  3. zdefiniować tabele w Accesie, i wprowadzić dane tak jak na poniższym obrazku
  4. zdefiniować więzy integralności referencyjnej między tabelami Towary-Zamówienia i Klienci-Zamówienia; w tym celu trzeba :
  5. 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]
  6. 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

 

 

 

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

 

Związki 3 argumentowe typu "wiele do wielu":
Rys 3

Związki 3 argumentowe typu "wiele do jednego":
Rys 4

Związki 3 argumentowe typu "wiele do jednego" (trochę inny):
Rys 5

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:

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:

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:

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"):

Między widokami przełączamy się guzikiem "Widok".