Nr książki Nr czytelnika Dostępność książki Autor Tytuł Temat
Transkrypt
Nr książki Nr czytelnika Dostępność książki Autor Tytuł Temat
Zajęcia 1. Przykład 1: biblioteka. Aby zaprojektować bazę danych trzeba dobrze przyjrzeć się potrzebom jej przyszłej użytkowników, odwiedzić, oglądnąć, przemyśleć. W bazie będą gromadzone dane. Wiele z tych danych ma charakter oczywisty, niektóre zaś bardzo abstrakcyjny i trudno je zauważyć, choć biorą udział w procesach podejmowania decyzji. Niektóre dane odnoszą się do konkretnych obiektów, inne zaś do zdarzeń, które z natury rzeczy są mniej uświadamiane. Czasami trzeba przewidzieć również istnienie danych, które w danym momencie nie są używane albo nawet potrzebne, ale które mogą być przydatne w przyszłości. Jeśli baza danych jest tworzona na własne potrzeby proces budowy jest łatwiejszy. Jeśli zaś użytkownikiem jest ktoś inny, powstaje problem odwzorowania jego wiedzy i potrzeb na projekt wykonywany przez osobę drugą. W tym drugim przypadku duże znaczenie ma odpowiednio działający problem komunikacji między tymi osobami. W następnej tabeli zebrane są dane używane w bibliotece, które są przetwarzane przez bibliotekarza w różnych fazach obsługi czytelnika. Nr książki Nr czytelnika Dostępność książki Autor Tytuł Temat Wydawnictwo Liczba egzemplarzy Data wypożyczenia Data zwrotu Kara Faktyczna data zwrotu UKD Fizyczne miejsce w bibliotece Data wydania Ilość stron Typ oprawy Liczba wypożyczonych przez czytelnika PDF stworzony przez wersję demonstracyjną pdfFactory www.pdffactory.pl Data zapisania czytelnika do biblioteki Imię i nazwisko czytelnika adres Data urodzenia Kontakt do czytelnika Nr dowodu tożsamości Typ dowodu tożsamości Jak widać lista jest długa a dane mają niejednorodny charakter. Spróbujmy wyobrazić sobie sytuację, w której bibliotekarz w przypadku wypożyczania za każdym razem, w przypadku każdej nowo wypożyczanej książki wypełniałby taką tabelę. W przypadku pierwszej książki tabela wyglądałaby tak: Nr książki Nr czytelnika Dostępność książki Autor 2303032 12345 tak Sienkiewicz Henryk Tytuł Potop Temat historyczna Wydawnictwo Prószyński Liczba egzemplarzy 4 Data wypożyczenia 07.05.2009 Data zwrotu 07.06.2009 Kara 0 Faktyczna data zwrotu UKD 301.78 Fizyczne miejsce w 4 półki za filarem PDF stworzony przez wersję demonstracyjną pdfFactory www.pdffactory.pl bibliotece Data wydania Ilość stron Typ oprawy Liczba wypożyczonych przez czytelnika Data zapisania czytelnika do biblioteki Imię i nazwisko czytelnika adres Data urodzenia Kontakt do czytelnika Nr dowodu tożsamości Typ dowodu tożsamości 2006 876 miękka 4 05.04.2000 Jan Kowalski Ul. Rakowicka 27 31510 Kraków 01.02.1960 Email: [email protected] ABC678654 Dowód osobisty wydany przez prezydenta miasta Krakowa W przypadku następnej zaś tak: Nr książki Nr czytelnika Dostępność książki Autor Tytuł 2303032 12345 tak Sienkiewicz Henryk Potop Temat historyczna 345902 12345 tak Sienkiewicz Henryk Ogniem i mieczem historyczna PDF stworzony przez wersję demonstracyjną pdfFactory www.pdffactory.pl Wydawnictwo Liczba egzemplarzy Data wypożyczenia Data zwrotu Kara Faktyczna data zwrotu UKD Fizyczne miejsce w bibliotece Data wydania Ilość stron Typ oprawy Liczba wypożyczonych przez czytelnika Data zapisania czytelnika do biblioteki Imię i nazwisko czytelnika adres Data urodzenia Kontakt do czytelnika Nr dowodu tożsamości Typ dowodu tożsamości Prószyński 4 07.05.2009 07.06.2009 0 Iskry 3 07.05.2009 07.06.2009 0 301.78 301.78 4 półki za filarem 4 półki za filarem 2006 876 miękka 4 2005 643 miękka 5 05.04.2000 05.04.2000 Jan Kowalski Jan Kowalski Ul. Rakowicka 27 31510 Kraków 01.02.1960 Email: [email protected] ABC678654 Ul. Rakowicka 27 31510 Kraków 01.02.1960 Email: [email protected] ABC678654 Dowód osobisty wydany przez prezydenta miasta Krakowa Dowód osobisty wydany przez prezydenta miasta Krakowa PDF stworzony przez wersję demonstracyjną pdfFactory www.pdffactory.pl Widać wiele patologii takiej metody obsługi danych. Dlatego po pierwsze należy rozdzielić dane na tabele, z których każda zawiera wspólne problemowo dane. W ten sposób opisuje się obiekty. W naszym przypadku takimi obiektami są: czytelnicy, egzemplarze książki, tytuły i wypożyczenia. O ile dwa pierwsze obiekty są dosyć oczywiste, to już konieczność wydzielenia tytułów i wypożyczeń budzi pewne zastrzeżenia.. Wydzielenie tytułów od egzemplarzy wynika z tego, że często w bibliotece występuje więcej niż jeden egzemplarz danego tytułu. Tytuł ma więc charakter abstrakcyjny, a egzemplarz – konkretny. Jeszcze ciekawsze jest wydzielenie tabeli wypożyczenia. Opisuje ona nie obiekty (jak wcześniej - egzemplarze) albo nawet abstrakcyjne cechy obiektów (tytuły) ale czynność – wypożyczenie. ISBN Autor Tytuł Temat Wydawnictwo Liczba egzemplarzy UKD Fizyczne miejsce w bibliotece Data wydania Ilość stron Typ oprawy Nr książki Dostępność książki Data wypożyczenia Data zwrotu Faktyczna data zwrotu Data wypożyczenia Nr książki Nr czytelnika Kara Liczba wypożyczonych przez czytelnika Data zapisania czytelnika do biblioteki Imię Nazwisko ulica Nr domu miasto Kod pocztowy kraj Data urodzenia Kontakt do czytelnika Nr dowodu tożsamości Typ dowodu tożsamości Podzielenie danych na logicznie spójne tabele jest pierwszym krokiem. W kolejnym trzeba zadbać aby każda tabela posiadała pole, które zapewni, że każdy kolejny wpis do niej będzie niepowtarzalny. Tego typu pole nazywane jest kluczem własnym (podstawowym) tabeli. Czasem zdarza się, że nie jedno pole ale dwa albo nawet kilka zapewnia niepowtarzalność rekordu w tabeli. Bywa jednak dosyć często że trzeba je wymyślić. Tego typu pola już w niektórych powyższych tabelach istnieją. W innych trzeba je dopiero dodać. Na przykład każde nowe wydanie książki opatrzone jest nowym numerem ISBN (są książki nie posiadające ISBN...). W przypadku czytelnika takim kandydatem na klucz podstawowy może być np. numer PESEL, ale co z obcokrajowami? Dlatego dobrym rozwiązaniem będzie wymyślenie pola nowego – sztucznego i nazwanie go np. „numer czytelnika”, albo może „ID_czytelnika”. Dla egzemplarza książki takim „sztucznym” polem może być „numer książki” albo „ID_ksiazki”. Podobnie dla wypożyczenia „numer wypożyczenia” albo „ID_wypożyczenia”. Kolejna tabela prezentuje rozwiązanie z zaznaczonymi na szaro polami – kluczami własnymi. PDF stworzony przez wersję demonstracyjną pdfFactory www.pdffactory.pl ISBN Autor Tytuł Temat Wydawnictwo Liczba egzemplarzy UKD Fizyczne miejsce w bibliotece Data wydania Ilość stron Typ oprawy ID_ksiazki Dostępność książki ID_wypozyczenia Data wypożyczenia Data zwrotu Faktyczna data zwrotu Data wypożyczenia Nr książki ID_czytelnika Kara Liczba wypożyczonych przez czytelnika Data zapisania czytelnika do biblioteki Imię Nazwisko ulica Nr domu miasto Kod pocztowy kraj Data urodzenia Kontakt do czytelnika Nr dowodu tożsamości Typ dowodu tożsamości Kolejnym krokiem jest ustalenia typu relacji między tabelami. Istnieją teoretycznie następujące sytuacje: 1) brak jest relacji (brak relacji) 2) jeden obiekt z pierwszej tabeli odpowiada wielu obiektom z drugiej tabeli ale konkretnemu obiektowi z drugiej tabeli odpowiada jeden obiekt z pierwszej tabeli (relacja jeden do wielu) 3) jeden obiekt z pierwszej tabeli odpowiada wielu obiektom z drugiej tabeli ale konkretnemu obiektowi z drugiej tabeli odpowiada wiele obiektów z pierwszej tabeli (relacja wiele do wielu) 4) jednemu obiektowi z pierwszej tabeli odpowiada dokładnie jeden obiekt z drugiej tabeli i każdemu obiektowi z drugiej tabeli odpowiada jeden obiekt z pierwszej tabeli (relacja jeden do jednego). W naszym przykładzie sytuacja pierwsza (brak relacji) istnieje np. między tabelami „egzemplarze” a czytelnik. Nie ma żadnego bezpośredniego związku między nimi. Związek taki pojawia się jedynie za pośrednictwem tabeli wypożyczenie. PDF stworzony przez wersję demonstracyjną pdfFactory www.pdffactory.pl Sytuacja druga (jeden do wielu) istnieje w przypadku związku tabeli „tytuły” i „egzemplarze”. Jednemu tytułowi może odpowiadać kilka egzemplarzy tego tytułu (kilka, to znaczy, że jeden też, ale możliwe, że więcej niż jeden). Ale dany egzemplarz książki nie może mieć więcej niż jeden tytuł – zawsze jeden i tylko jeden. Relacja jest więc typu: jeden do wielu (gdzie jeden jest po stronie tabeli „tytuły” a wiele po stronie tabeli „egzemplarze”). Podobna relacja istnieje między tabelami „egzemplarze” i „wypożyczenia”, ponieważ jeden konkretny egzemplarz może być wypożyczany dowolnie wiele razy, ale w konkretnym wypożyczeniu wystąpić może tylko raz. I identycznie w relacji między „czytelnikami” a „wypożyczeniami”, bo dany czytelnik może przeprowadzać dowolnie wiele wypożyczeń ale każde z wypożyczeń może być dokonane tylko przez jednego – konkretnego czytelnika. W powyższym układzie nie ma przykładów relacji wiele do wiele (jest w kolejnym przykładzie). Jeśli jednak taka relacja istniałaby, to należałoby ją rozbić na dwie relacje typu jeden do wielu, wstawiając dodatkową tabelę. Relacyjne bazy danych, a taką jest Access, nie pozwalają na istnienie tego typu relacji. Przykładem relacji jeden do jeden byłaby sytuacja w której pewne dane na temat czytelników ukrylibyśmy w osobnej tabeli. Mogłyby być to na przykład jakieś szczegółowe dane na temat czytelnika, które z pewnych powodów chcielibyśmy ukryć przed niektórymi użytkownikami. Jest to jednak sytuacja rzadka. Kolejny rysunek pokazuje typ relacji między tabelami. Znakiem „∞” oznaczono stronę „wiele” relacji a „1” stronę jeden. 1 ISBN Autor Tytuł Temat Wydawnictwo Liczba egzemplarzy UKD Fizyczne miejsce w bibliotece Data wydania Ilość stron Typ oprawy 1 ∞ ∞ 1 ID_ksiazki Dostępność książki ∞ ID_wypozyczenia Data wypożyczenia Data zwrotu Faktyczna data zwrotu Data wypożyczenia Nr książki PDF stworzony przez wersję demonstracyjną pdfFactory www.pdffactory.pl ID_czytelnika Kara Liczba wypożyczonych przez czytelnika Data zapisania czytelnika do biblioteki Imię Nazwisko ulica Nr domu miasto Kod pocztowy kraj Data urodzenia Kontakt do czytelnika Nr dowodu tożsamości Typ dowodu tożsamości Został do rozwiązania jeszcze jeden problem: w jaki sposób tabele łączą się ze sobą. Rozwiązaniem jest umieszczenie klucza podstawowego ze strony „jeden” relacji w tabeli ze strony „wiele” relacji. W przypadku relacji „jeden do jednego” są to dokładnie takie same pola. W przypadku tabeli rozbijającej niedopuszczalną relację wiele do wiele umieszcza się w niej klucze podstawowe z tabel istniejących odtąd z nią w relacji „jeden do wiele” (patrz przykład numer 2). Kolejny rysunek pokazuje rozwiązanie. Klucze obce oznaczono kolorem żółtym 1 ISBN Autor Tytuł Temat Wydawnictwo Liczba egzemplarzy UKD Fizyczne miejsce w bibliotece Data wydania Ilość stron Typ oprawy 1 ∞ ∞ 1 ID_ksiazki Dostępność książki ISBN ∞ ID_wypozyczenia Data wypożyczenia Data zwrotu Faktyczna data zwrotu Data wypożyczenia Nr książki ID_ksiazki ID_czytelnika Przykład 2: baza zamówień małego sklepu. Pomijamy początkowe rozważania, zatrzymując się na problemie relacji PDF stworzony przez wersję demonstracyjną pdfFactory www.pdffactory.pl ID_czytelnika Kara Liczba wypożyczonych przez czytelnika Data zapisania czytelnika do biblioteki Imię Nazwisko ulica Nr domu miasto Kod pocztowy kraj Data urodzenia Kontakt do czytelnika Nr dowodu tożsamości Typ dowodu tożsamości ID_klienta Nazwa Adres Miasto Region Kod pocztowy Kraj telefon fax E_mail uwagi ∞ 1 ID_produktu nazwa Ilość jednostkowa Cena jednostkowa Stan magazynu Ilość zamówiona Stan minimum Wycofany ∞ ∞ ID_zamowienia Data zamowienia Data wymagana Data wysyłki Problemem powyższego projektu jest to, że istnieje relacja wiele do wiele między tabelą zamówienia a tabelą produkty. Jest tak dlatego, że rzeczywiście, w jakimś zamówieniu klient może zamówić więcej niż jeden produkt (wiele) i każdy z produktów potencjalnie może pojawić się w dowolnej liczbie zamówień (wiele). Rozwiązaniem jest wstawieniem dodatkowej tabeli rozbijającej relacje wiele do wiele na dwie wiele do jeden. ID_klienta Nazwa Adres Miasto Region Kod pocztowy Kraj telefon fax E_mail uwagi 1 1 ∞ ∞ ∞ Ilość rabat 1 ID_zamowienia Data zamowienia Data wymagana Data wysyłki PDF stworzony przez wersję demonstracyjną pdfFactory www.pdffactory.pl ID_produktu nazwa Ilość jednostkowa Cena jednostkowa Stan magazynu Ilość zamówiona Stan minimum Wycofany Ponieważ nowa tabela „szczegóły zamówień” jest powołana w celu złamania relacji wiele do wielu, jej kluczem wsłanym będą dwa klucze podstawowe z tabel, które teraz rozdziela: „id_zamowienia” i „id_produktu”. Dodano również klucz obcy do tabeli zamówienia. ID_klienta Nazwa Adres Miasto Region Kod pocztowy Kraj telefon fax E_mail uwagi . 1 1 ∞ ∞ ∞ ID_produktu ID_zamowienia Ilość rabat 1 ID_zamowienia Data zamowienia Data wymagana Data wysyłki ID_klienta PDF stworzony przez wersję demonstracyjną pdfFactory www.pdffactory.pl ID_produktu nazwa Ilość jednostkowa Cena jednostkowa Stan magazynu Ilość zamówiona Stan minimum Wycofany