Tematem często pomijanym podczas prowadzenia ćwiczeń z baz danych jest projektowanie. Studenci cenią sobie wiedzę praktyczną i starają się zapoznać z aplikacjami służącymi do wykonywania baz danych lub całych systemów informatycznych, ale nie są zainteresowani teorią, której znajomość jest niezbędna do wykonania nowej bazy danych (stąd później liczne próby przechowania danych niemal tak jak w Excelu). Żeby uzupełnić nieco tę lukę, przedstawię tu w dużym uproszczeniu jeden ze sposobów wykonania nowej bazy danych: diagram związków encji (z ang. ERD - entity relationship diagram).
Diagram związków encji jest jednym ze sposobów przedstawienia modelu logicznego bazy danych.
Jest to rysunek encji i związków
pomiędzy nimi, który ułatwia analizę wybranego obszaru świata
rzeczywistego modelowanego najczęściej (można modelować także inne światy np.: wirtualne
o ile przyszły użytkownik bazy zapłaci za pracę rzeczywistymi pieniędzmi) w bazie danych. Wykonywanie diagramów związków encji umożliwiają
aplikacje będące narzędziami CASE, do których zaliczyć można
m.in. ER/1 firmy Embarcadero Technologies
(wersji trial ER/1 rozpowszechniana jest na płycie CD załączonej do
książki "SQL. Księga eksperta").
Oprócz ER/1 istnieją również inne
aplikacje umożliwiające wykonywanie diagramów związków encji (np.: System Engineer
firmy Learmonth & Burchett Management Systems Inc. lub
Power Designer firmy
PowerSoft) i wiele innych. W zależności od użytej aplikacji
diagram związków encji może być inaczej przedstawiony i w odmienny sposób konstruowany.
Tu postaram się przybliżyć tylko ogólną ideę wykonania takiego diagramu.
Jak już wiadomo (z poprzedniego semestru) baza danych jest najczęściej modelem pewnego fragmentu otaczającego nas świata rzeczywistego. Ów fragment nazywany jest obszarem analizy i podczas tych zajęć interesuje nas uproszczony model składania zamówień przy sprzedaży bombonierek. Można ów model przekształcić na diagram związków encji i na jego podstawie przeanalizować, czy baza danych będzie poprawnie odzwierciedlać zdarzenia zachodzące w świecie rzeczywistym (i to zanim baza zostanie wykonana, co zmniejsza koszty produkcji oprogramowania).
Prowadzący zajęcia zdają sobie sprawę, że ten model jest najczęściej omawiany w książkach o bazach danych, ale też najczęściej modelujemy działalność firmy, która prowadzi sprzedaż towarów lub usług. Z tego więc powodu omówimy sobie podczas zajęć model przyjmowania w firmie zamówień na towar (lub usługę). |
|
Zanim powstanie diagram, należy poznać obszar analizy. W tym celu przeprowadza się wywiady z odbiorcami bazy danych, z
ekspertami, analizuje się przepisy prawne, przegląda zasoby Sieci (np.:
Firma Cukiernicza "Solidarność"), analizuje dokumenty firmy itp.
Zainteresowanych tą tematyką odsyłam do
książki
"Tworzenie hurtowni danych".
Mając na uwadze ograniczenia czasowe w prowadzeniu zajęć opierać się będziemy tylko na krótkim opisie:
"Klient może kupić (lub zamówić do późniejszego odbioru) wiele, różnych bombonierek.
Klient może dostać fakturę VAT jako dokument płatniczy do zamówienia
lub transakcja kupna-sprzedaży może zostać zafiskalizowana (wtedy, gdy klient przy zakupie płaci gotówką).
Klientem może być firma (podmiot gospodarczy) lub osoba fizyczna. Jeżeli zamówienie zostanie źle przyjęte, a
wystawiono już do niego fakturę VAT, to wystawiamy do zamówienia kolejną fakturę: fakturę korygującą,
a następnie przyjmujemy ponownie zamówienie. Przyjmujemy, że zamówienie dotyczy tylko jednego klienta
(w rzeczywistości może to być: osoba zamawiająca, odbiorca i płatnik) i jest ono obsługiwane przez jednego pracownika.
Niekiedy musimy informować klientów o zawartości bombonierek (o czekoladkach),
jeżeli wymagają oni tych informacji."
Spróbujmy wyodrębnić z tego krótkiego opisu istotne obiekty funkcjonujące w świecie rzeczywistym. W tym celu osoby
początkujące mogą posłużyć się diagramem Venna (zaawansowani potrafią z tego opisu stworzyć diagram związków encji).
Diagram Venna to rysunek obiektów świata rzeczywistego (nie musi to byś wierny rysunek -
wystarczą jakieś symbole).
Zauważmy, że w podanym opisie pojawiają się (tu sztucznie wyróżnione) następujące obiekty: klienci, pracownicy, zamówienia,
bombonierki, czekoladki, faktury. Można wyróżnić w tym modelu więcej obiektów, ale utrudniłoby to jego zarówno
przedstawienie jak i zrozumienie (np.: nasza firma może być kilkoma podmiotami gospodarczymi). Zaobserwowane obiekty
odrysowujemy na diagramie Venna i obiekty tej samej klasy grupujemy w zbiory (tu 6 zbiorów: klientów, pracowników, zamówień,
bombonierek, czekoladek i faktur). Pomiędzy poszczególnymi obiektami rysujemy linie, które symbolizują zależności pomiędzy
tymi obiektami zachodzące w świecie rzeczywistym.
Przyjrzyjmy się dokładnie powyższemu rysunkowi i przeanalizujmy związki, które zachodzę pomiędzy poszczególnymi obiektami.
Jak widać na przykładzie klienta "Robert
Miakowski": jeden klient może złożyć wiele zamówień (oczywiście może też złożyć jedno zamówienie). Czy poprawną
sytuacją w świecie rzeczywistym jest znajomość klienta, który nie składał żadnego zamówienia? Z pozoru wydaje się, że to
błędna sytuacja: kto podawałby swoje dane osobowe, a nic nie zamawiał (na diagramie taką osobą jest "Mariusz Białek")?
Jednak okazuje się, że taka sytuacja może mieć miejsce, gdy firma zakupi dane osobowe potencjalnych klientów (np.: osób
mieszkających w okolicy).
Analizujmy dalej związki między klientami, a zamówieniami, ale tym razem od strony zamówień.
Okazuje się, że dane zamówienie jest składane przez najwyżej jednego klienta (to efekt wcześniejszego założenia)
i że mogą być zamówienia takie, że klient jest nieznany, a sytuacja taka ma miejsce wtedy, gdy
anonimowa osoba kupuje towar i płaci gotówką, a fakt ten jest rejestrowany tylko w urządzeniu
fiskalnym - drukarce lub kasie (więcej o tych urządzeniach tutaj i tutaj).
Podobne zależności występują pomiędzy pracownikami, a zamówieniami: dany pracownik może obsługiwać wiele zamówień (gdy jest on kasjerem lub sprzedawcą np. "Stanisław Kowalski", ale nie musi - gdy jest on załóżmy dyrektorem np. "Jan Nowak") oraz dane zamówienie MUSI być obsłużone przez jednego pracownika (też efekt założenia, że pracownik jest jeden, jednak musi ktoś w imieniu firmy zamówienie przyjąć).
Ciekawe zależności występują pomiędzy bombonierkami, a zamówieniami. Okazuje się, że KAŻDE zamówienie dotyczy przynajmniej jednego towaru, ale może też dotyczyć wielu towarów (np.: "zamówienie 301"), a z kolei towar może być zamawiany wielokrotnie w różnych zamówieniach (np.: bombonierka "Czekoladowe party"), ale też może istnieć towar, który nie był nigdy zamawiany (np.: dopiero się pojawił w sprzedaży lub jest zbyt drogi, aby był kupiony - tu: bombonierka "Czekoladowy słoń").
Podobne do powyższych zależności występują pomiędzy bombonierkami, a czekoladkami - KAŻDA bombonierka zawiera w sobie przynajmniej jeden typ czekoladki, a każda z czekoladek danego typu może być zapakowana do różnych typów bombonierek. Sytuacja dotyczaca czekoladki "Czekoladka mleczna" może sygnalizować stan polegający na tym, że znamy już co będzie składnikiem nowego typu bombonierki, który jest dopiero w produkcji.
Ostatnimi interesującymi zależnościami są te zachodzące pomiędzy zamówieniem, a fakturą. Jak widać z diagramu Venna do zamówienia możemy wystawić maksymalnie dwie faktury, ale każda faktura musi dotyczyć jednego zamówienia (nie wykonujemy faktur zbiorczych - uproszczenie projektu). Faktury VAT i korygujące mogą mieć wspólną numerację (to zastosujemy), ale mogą być oddzielnie numerowane.
W praktyce diagram Venna nie jest wykonywany, gdyż byłby niecztelny (zbyt wiele zależności pomiędzy obiektami utrudnia odczytanie diagramu) dla większej ilości obiektów przy złożonych modelach wykonywanych w zastosowaniach profesjonalnych. Ta technika została przedstawiona dla ułatwienia zrozumienia bardzo prostego projektu bazy danych.
Jeżeli dobrze zastanowiliśmy się nad zależnościami w diagramie Venna, to możemy przekształcić go na diagram związków encji. Podczas tej konwersji zbiory obiektów przekształcamy na encje, a zależności pomiędzy obiektami na związki encji:
Przyjmuje się, że nazwa encji jest rzeczownikiem w licznie pojedynczej (nie jest to jednak obowiązkowe), a tabeli w liczbie mnogiej. Z tego powodu na powyższym diagramie w prostokątach symbolizujących encje pojawiły się nazwy takie jak: "klient", "pracownik", "zamówienie" i inne. Zauważmy też, że pomiędzy encjami pojawiły się specjalnie oznakowane kreski, które symbolizują związki encji. Jak już wspominałem, sposobów na ich oznakowanie jest kilka. Tu użyte jest oznakowanie wg notacji Martin-McClure'a, czyli: "okrąg" oznacza słowo "może", "kreska" - musi, a "wronie pazury" na zakończeniu symbolu - "do wielu". Odczyt powyższego diagramu jest prostszy niż diagramu Venna. Czytając związki encji (czytamy w obie strony związku) widzimy, że:
Tu jeszcze raz zaznaczę, że analizowany podczas zajęć projekt nie nadaje się do zastosowań profesjonalnych, a dzieje się tak m.in. dlatego, że nie uwzględniamy w nim konkretnych dostaw towaru. Przyjmujemy, że mamy zawsze pełne magazyny niepsujących się bombonierek i z tego powodu mówiąc bombonierka mamy na myśli raczej typ bombonierki, a nie konktetną bombonierkę z konktetnej dostawy. Z tego powodu przeczytałem związki encji mówiąc o typach bombonierek, czy typach czekoladek. W przyjętym modelu bombonierka ma zawsze taką samą cenę (pamiętaną dla bombonierki), a tymczasem powinien być do niej przypisany cennik, który obowiązuje w danym okresie czasu. Pomijamy ten problem w celu uproszczenia projektu.
Nie istnieje taki RDBMS, który obsługuje związki wiele do wielu, a takie właśnie związki zachodzą pomiędzy bombonierką i zamówieniem oraz czekoladką i bombonierką. Związki te muszą zostać usunięte z diagramu w wyniku zastąpienia ich dwoma związkami jeden do wielu i encją przejściową (tu warto zaznaczyć, że istnieją wprawdzie odpowiednie narzędzia do projektowania, które zrobią to automatycznie, ale nadają one niezrozumiałe nazwy tworzonym encjom przejściowym i potrafią też robić błędy - z tego powodu warto wszystkie modyfikacje wykonać samodzielnie).
W tym wypadku zostanią dodane encje przejściowe "szczegół zamówienia" (właściwie powinna się ona nazywać "pozycja zamówienia" mówimy przecież "pozycja pierwsza", a nie "szczegół pierwszy") oraz "zawartość bombonierki", a także odpowiednie związki jeden do wielu (wiele po stronie encji przejściowej!), które należy czytać:
Po wykonaniu diagramu (już bez związków wiele do wielu) określamy jeszcze jakie atrybuty powinna posiadać każda z encji
(czyli określamy cechy obiektów ze świata rzeczywistego). Dodatkowo określmy, czy podanie wartości do danego atrybutu jest
wymagane (NOT NULL), czy nie (NULL).
Przy projektowaniu ważne jest opisanie znaczenia zarówno encji jak i ich atrybutów. Te opisy to fragment tzw. metadanych
(dane o danych), a bez nich wybieranie informacji z bazy jest mocno utrudnione (w wypadku dużych, złożonych systemów -
niemożliwe, ponieważ nie wiemy jakie informacje wybieramy). Nie każdy SZRBD posiada możliwość
zapamiętania dodatkowych opisów tabel i kolumn (np.: poleceniem COMMENT ON w przypadku Oracle lub opis pola, czy właściwości
tabeli w MS Access) - z tego powodu opisy te są ważne.
Zarówno przy wykonywaniu diagramu związków encji jak i przy określaniu atrybutów encji przydatna jest znajomość dokumentów,
które używane są w firmie. Z tych dokumentów możemy się dowiedzieć jakie właściwości obiektów musimy znać, aby można było
wykonywać takie dokumenty używając danych z bazy.
FAKTURA VAT NR 347
|
Wiekszość atrybutów encji Klient możemy odczytać wprost z faktury VAT (na niebiesko zaznaczono wartości, które należy na fakturze uzupełnić - uwaga! przyjęto wiele uproszczeń). W przypadku pozostałych encji wystarczyć musi opis znaczenia atrybutu.
Encja: |
KLIENT |
|||
Opis: |
Klienci firmy i ich adresy. Oczywiście wszelka zbieżność nazwisk i adresów jest przypadkowa. To nie są dane osobowe, a przypadkowo skonstruowane w celu odbycia ćwiczeń. Klientem może być osoba fizyczna lub podmiot gospodarczy. Dane o kliencie są potrzebne do wystawienia faktury. |
|||
Atrybut |
Wymagany |
Klucz |
Opis |
|
Identyfikator klienta |
NOT NULL |
PRIMARY KEY |
Identyfikator klienta. Klucz podstawowy. |
|
Nazwisko |
NOT NULL |
Nazwisko klienta. |
||
Imię |
NOT NULL |
Imię klienta. |
||
Nazwa firmy |
NULL |
Jeżeli podamy nazwę firmy, to klienta traktujemy jak podmiot gospodarczy. Jeżeli nie podamy, to klientem jest osoba fizyczna. |
||
Ulica i numer domu |
NOT NULL |
Adres klienta - oprócz ulicy i numeru domu jest tu podawany także numer mieszkania (o ile jest potrzebny). W szczególnych przypadkach adresem jest skrzynka pocztowa. |
||
Miasto |
NOT NULL |
Nazwa miasta, w którym mieszka klient. |
||
Kod pocztowy |
NOT NULL |
Kod pocztowy do adresu klienta. Zastosowano tu znaczne uproszcz enie względem świata rzeczywistego - adres jest krajowy. |
||
Telefon kontaktowy |
NULL |
Numer telefonu, pod którym najłatwiej zastać klienta. Jest to uproszczenie względem świata rzeczywistego - telefonów może być wiele i nie jest to jedyny rodzaj kontaktu (są jeszcze m.in.: e-mail, fax). |
||
NIP |
NULL |
Numer Identyfikacji Podatkowej. Przyjmiemy, że musi być podany jeżeli klientem jest podmiot gospodarczy. Jeżeli klientem jest osoba fizyczna, to nie (podstawa prawna Rozporządzenie Ministra Finansów z dnia 22 grudnia 1999 Dz.U. 109/99 rozdział 13 paragraf 38 ustęp 1). |
Encja: |
PRACOWNIK |
|||
Opis: |
Pracownicy zatrudnienie w firmie. Podobnie jak w wypadku klientów nie są to dane osobowe. Pamiętamy tu najistotniejsze dane dotyczące uprawnień pracownika i niezbędne w procesie sprzedaży - inne są pominięte (np. pensja). |
|||
Atrybut |
Wymagany |
Klucz |
Opis |
|
Identyfikator pracownika |
NOT NULL |
PRIMARY KEY |
Identyfikator pracownika. Klucz podstawowy. |
|
Nazwisko |
NOT NULL |
Nazwisko pracownika. |
||
Imię |
NOT NULL |
Imię pracownika. |
||
Wewnętrzny |
NULL |
Numer telefonu wewnętrznego firmy do pracownika. |
||
Nazwa działu |
NOT NULL |
Nazwa działu, w którym pracuje dana osoba. Jest to uproszczenie względem świata rzeczywistego - osoba może pracować w kilku działach. | ||
Data zatrudnienia |
NOT NULL |
Data zatrudnienia pracownika. |
||
Data zwolnienia |
NULL |
Data zakończenia pracy przez pracownika wynikająca z ograniczenia umowy o pracę na czas określony lub wynikająca z rozwiązania umowy o pracę. Może być to wartośc pusta, gdy umowa o pracę podpisana jest na czas nieokreślony. |
||
Czy administrator |
NOT NULL |
Tak - pracownik może posługiwać się systemem informatycznym bez ograniczeń. Nie - może tylko przyjmować zamówienia i wystawiać do nich faktury. Jest to uproszczenie względem świata rzeczywistego - uprawnienia użytkowników systemu są pamiętane w oddzielnych tabelach i są bardzo złożone. |
||
Login |
NOT NULL |
Login użytkownika potrzebny do zidentyfikowania użytkownika systemu w momencie logowania się do systemu i przyznawania uprawnień. Przyjmiemy, ze jest to wartość unikalna, a jednak nie będąca kluczem podstawowym (aby nie była ona przechowywana docelowo w tabeli Zamówienia, do której każdy użytkownik ma dostęp). |
||
Hasło |
NOT NULL |
Hasło użytkownika potrzebne do zidentyfikowania użytkownika systemu w momencie logowania się do systemu i przyznawania uprawnień. |
Encja: |
CZEKOLADKA |
|||
Opis: |
Uproszczona względem świata rzeczywistego informacja o czekoladce (m.in. brak informacji o terminie przydatności do spożycia, masie netto, kaloryczności itp.). |
|||
Atrybut |
Wymagany |
Klucz |
Opis |
|
Identyfikator czekoladki |
NOT NULL |
PRIMARY KEY |
Identyfikator czekoladki trakotwany jako 3-znakowy uniwersalny kod produktu (w świecie rzeczywistym byłby to kod kreskowy, ale na zajęciach nie będziemy omawiać programowania czytników kodów kreskowych - więcej o czytnikach tutaj). Klucz podstawowy. |
|
Nazwa czekoladki |
NOT NULL |
|
Nazwa czekoladki (zazwyczaj wyróżniejąc jakiś obiekt określamy jego nazwę). |
|
Typ czekolady |
NOT NULL |
|
Jakim typem czekolady oblana jest czekoladka. Przyjmiemy, że będzie to jedna z wartości: biała, mleczna, karmel, ciemna, słodko-gorzka, kremowo-kakaowa. Przyjmujemy też, że zbiór ten nie będzie rozszerzany. |
|
Typ orzechów |
NOT NULL |
Z jakimi orzechami jest polewa. Przyjmiemy, że będzie to jedna z wartości: bez orz., brazylijski, laskowy, mielone, różne, migdał, nerkowiec, pekan, pistacjowy, włoski. Przyjmujemy też, że zbiór ten nie będzie rozszerzany. |
||
Typ nadzienia |
NOT NULL |
Typ nadzienia czekoladki. Przyjmiemy, że będzie to jedna z wartości: bez nadz., borówka amerykańska, kokos, likier migdałowy, malina, marcepan, marmolada, masło orzechowe, mokka kremowa, truskawka, wiśnia krem, wiśnia. Przyjmujemy też, że zbiór ten nie będzie rozszerzany. |
||
Opis czekoladki |
NULL |
Pełen opis czekoladki. Nazwa nie zawsze wystarczy do opisania obiektu. |
||
Koszt czekoladki |
NOT NULL |
Koszt produkcji jednej czekoladki (ponieważ mogą być to ułamki groszy, tę wielkość należy zapamiętać z podwyższoną precyzją (a nie tylko 2 miejsca po przecinku). |
||
Rysunek |
NULL |
Rysunek lub zdjęcie czekoladki. Opis nie zawsze wystarczy do przedstawienia pełnej informacji o obiekcie. |
Encja: |
BOMBONIERKA |
|||
Opis: |
Krótki opis bombonierki. |
|||
Atrybut |
Wymagany |
Klucz |
Opis |
|
Identyfikator bombonierki |
NOT NULL |
PRIMARY KEY |
Identyfikator towaru podany jako 4-znakowy sktót. Klucz podstawowy. Może to być indeks materiałowy lub w przypadku bombonierki kod kreskowy. |
|
Nazwa bombonierki |
NOT NULL |
Nazwa bombonierki. |
||
Cena brutto |
NOT NULL |
Cena bombonierki (przyjmujemy, że obowiązuje na ten towar 22% stawka VAT). |
||
Opis bombonierki |
NULL |
Opis bombonierki. |
Encja: |
ZAWARTOŚĆ BOMBONIERKI |
|||
Opis: |
Dane o tym jaka czekoladka (Identyfikator czekoladki) jest zapakowana do jakiej bombonierki (Identyfikator bombonierki) i w jakiej ilości (Ilość). Przykład encji przejściowej. |
|||
Atrybut |
Wymagany |
Klucz |
Opis |
|
Identyfikator bombonierki |
NOT NULL |
PRIMARY KEY, FOREIGN KEY |
Wraz z atrybutem Identyfikator czekoladki tworzy tu dwupolowy klucz podstawowy. Jest też kluczem obcym w związku z identyfikatorem bombonierki encji BOMBONIERKA. |
|
Identyfikator czekoladki |
NOT NULL |
PRIMARY KEY, FOREIGN KEY |
Wraz z atrybutem Identyfikator bombonierki tworzy tu dwupolowy klucz podstawowy. Jest też kluczem obcym w związku z identyfikatorem czekoladki encji CZEKOLADKA. |
|
Ilość |
NOT NULL |
Ile sztuk (to ważne uproszczenie) czekoladek danego typu zapakowanych jest do danego typu bomboniekrki. |
Encja: |
ZAMÓWIENIE |
|||
Opis: |
Informacja o złożeniu zamówienia. |
|||
Atrybut |
Wymagany |
Klucz |
Opis |
|
Identyfikator zamówienia |
NOT NULL |
PRIMARY KEY |
Identyfikator zamówienia. Klucz podstawowy. Jest to kolejny numer zamówienia. |
|
Identyfikator klienta |
NULL |
FOREIGN KEY |
Kto składał zamówienie. Klucz obcy w związku z identyfikatorem klienta encji KLIENT. Jeżeli jest NULL, to oznacza, że nie znamy klienta, który robił zakupy (wystawiliśmy paragon, a klient musiał zapłacić gotówką). |
|
Identyfikator pracownika |
NOT NULL |
FOREIGN KEY |
Kto przyjmował zamówienie. Klucz obcy w związku z identyfikatorem pracownika encji PRACOWNIK. |
|
Data zamówienia |
NOT NULL |
Data złożenia zamówienia. Domyślnie dzisiaj. |
||
Data realizacji |
NOT NULL |
Data realizacji zamówienia (większa lub równa dacie zamówienia). |
||
Termin płatności |
NOT NULL |
Ustalona data zapłaty za zamówiony towar (zwyczajowo większa lub równa dacie realizacji - najczęściej do 14 dni po dacie realizacji). |
||
Opłacono |
NULL |
Data opłacenia zamówienia (większa lub równa niż data złożenia zamówienia). Nie każdy płaci gotówką. Znane są inne formy płatności: przelew bankowy lub przekaz pocztowy. Jeżeli data opłacenia jest NULL, to identyfikator klienta musi być podany. |
Encja: |
SZCZEGÓŁ ZAMÓWIENIA |
|||
Opis: |
Poszczególne pozycje zamówień - jaki (i ile) towar został zakupiony. |
|||
Atrybut |
Wymagany |
Klucz |
Opis |
|
Identyfikator zamówienia |
NOT NULL |
PRIMARY KEY, FOREIGN KEY |
Wraz z atrybutem Identyfikator bombonierki tworzy dwupolowy klucz podstawowy. Jest też kluczem obcym w związku z identyfikatorem zamówienia encji ZAMÓWIENIE. |
|
Identyfikator bombonierki |
NOT NULL |
PRIMARY KEY, FOREIGN KEY |
Wraz z atrybutem Identyfikator zamówienia tworzy dwupolowy klucz podstawowy. Jest też kluczem obcym w związku z atrybutem Identyfikator bombonierki encji BOMBONIERKA. |
|
Ilość |
NOT NULL |
Ile zamówiono sztuk danej bombonierki. |
Encja: |
FAKTURA |
|||
Opis: |
Zapamiętanie danych o wystawieniu faktury do zamówienia. |
|||
Atrybut |
Wymagany |
Klucz |
Opis |
|
Numer faktury |
NOT NULL |
PRIMARY KEY |
Numer kolejny faktury. Klucz podstawowy. |
|
Identyfikator zamówienia |
NOT NULL |
FOREIGN KEY |
Klucz obcy w związku z identyfikatorem zamówienia encji ZAMÓWIENIE. |
|
Czy korekta |
NOT NULL |
Tak - wystawiono fakturę korygującą. Nie - wystawiono fakturę VAT. Domyślnie przyjmuje wartość Nie. Razem z Identyfikatorem zamówienia stanowią wartości unikalne (para wartości nie powtatrza się, co umożliwia wystawienie maksymalnie 2-ch faktur do zamówienia: VAT i korygującej). |
Tak określone encje i ich atrybuty to odpowiedniki tabel i ich kolumn. Związki encji, to odpowiedniki kluczy obcych. Przed przekształceniem diagramu związków encji w układ tabel wybieramy SZBD, w którym będzie wykonana nowa baza danych i określamy typ danych dla każdej kolumny (domenę atrybutu encji).
Zdaję sobie sprawę, że wykonując ten model przyjęto wiele istotnych uproszczeń względem świata rzeczywistego. Z tego powodu prezentowany model nie nadaje się do profesjonalnych zastosowań. Tu proszę o wyrozumiałość, ale pominięcie uproszczeń rozbuduje ten model do ogromnych rozmiarów, co uniemożliwi przedstawienie go podczas zajęć.
Opracowując model oparto się na pomyśle z książki "Microsoft Access 7 dla Windows 95 - krok po kroku".