Dr inż. Ludmiła Rekuć p. 518 B4 www.ioz.pwr.wroc.pl, ludmila.rekuc
Transkrypt
Dr inż. Ludmiła Rekuć p. 518 B4 www.ioz.pwr.wroc.pl, ludmila.rekuc
Dr inż. Ludmiła Rekuć p. 518 B4 www.ioz.pwr.wroc.pl, [email protected] Dr inż. Witold Rekuć p. 517 B4 www.ioz.pwr.wroc.pl, [email protected] - Przedmiot kończy się egzaminem - Egzamin ma formę testu teoretycznego Literatura 1. C. Date. Wprowadzenie do systemów baz danych. WNT, 2000. 2. J. Ullman, J. Widom. Podstawowy wykład z systemów baz danych. WNT, 2000. 3. Podręczniki systemu MS ACCESS. 4. Materiały do wykładu © Ludmiła Rekuć, Witold Rekuć 11 Laboratorium IBM San Jose (California) ”A relational model for large shared data banks” Communication of the ACM, 13:6,1970. System R - prototyp oprogramowania SEQUEL2 – prototyp języka Dziś: Oprogramowanie MS ACCESS, SQL Server, PostgreSQL, INGRES, ORACLE, DB2, Informix, Progres, … Język SQL Edgar Frank Codd (1923 – 2003) © Ludmiła Rekuć, Witold Rekuć 21 Baza danych jest zbiorem tabel (relacji) pamiętanych w jednym lub wielu plikach Firmy Firm2000.mdb Miejscowości Nr Nazwa Ulica KodMjc Telefon 0 Nasza Firma Kod Nasza 1 234 23 1 Wrocław DL 1 Abeja Abejowska 3 234 55 2 Opole OP 2 Audi Audiego 2 3 Wałbrzych DL 3 Pafawag Wagonowa 2 4 Iase Energetyczna 3 5 Dolmed Medyczna 1 Nazwa Wojewodztwa KodWoj Kod Nazwa DL Dolnośląskie OP Opolskie 256 12 PozycjeDokumentu Dokumenty Nr NrSprzerdawcy Np SmbTow CenaNetto Ilość Nr NrSprzerdawcy NrNabywcy Data 1/02 0 1 001 12,00 20 1/02 0 2 13.02.02 1/02 0 2 003 4,50 200 2/02 0 3 21.03.02 2/02 0 1 004 7,00 150 1/02 1 0 03.01.02 1/02 1 1 002 13,00 300 3/02 0 1 31.04.02 1/02 1 2 001 12,00 120 2/02 3 0 17.02.02 1/02 1 3 004 7,50 220 4/02 0 4 13.05.02 3/02 0 1 001 11,00 45 3/02 0 2 003 4,50 125 Towary 3/02 0 3 004 7,80 35 Smb Nazwa Jm StawkaVat 3/02 0 4 005 3,20 200 001 Pasztet kg 7% 2/02 3 1 001 12,00 30 002 Mortadela kg 7% 2/02 3 2 003 4,60 50 003 Chipsy paczka 400g 7% 4/02 0 1 005 3,60 90 004 Kawa Jakobs paczka 100g 7% 005 Makrela kons. puszka 250g 7% © Ludmiła Rekuć, Witold Rekuć 31 System zarządzania bazą danych Baza danych System zarządzania bazą danych Język użytkowników bazy danych Język administratora bazy danych ... Użytkownicy bazy danych © Ludmiła Rekuć, Witold Rekuć Administrator bazy danych 41 Tabela (relacja) Nazwa tabeli (relacji) nazwa kolumny (atrybutu, pola) Firmy Nr Nazwa Ulica KodMjc Telefon 0 Nasza Firma Nasza 1 234 23 1 Abeja Abejowska 3 234 55 2 Audi Audiego 2 3 Pafawag Wagonowa 2 4 Iase Energetyczna 3 5 Dolmed Medyczna 1 256 12 nagłówek (schemat) Wiersz (rekord, krotka) kolumna (atrybut, pole) © Ludmiła Rekuć, Witold Rekuć 51 Wartości w kolumnach (wartości atrybutów) Firmy Nr Nazwa Ulica KodMjc Telefon 0 Nasza Firma Nasza 1 234 23 1 Abeja Abejowska 3 234 55 2 Audi Audiego 2 3 Pafawag Wagonowa 2 4 Iase Energetyczna 3 5 Dolmed Medyczna 1 6 Dolmel 256 12 Elektryczna 3 452 34 6 Zbiór dopuszczalnych numerów firm 452 34 Dolmel Elektryczna 3 Zbiór dopuszczalnych nazw firm © Ludmiła Rekuć, Witold Rekuć Zbiór dopuszczalnych nazw ulic Zbiór dopuszczalnych kodów miejscowości Zbiór dopuszczalnych numerów telefonów 61 Dziedzina Dziedzina wartości jest to zbiór wartości, które potencjalnie mogą pojawić się w kolumnie tabeli (które może przyjmować atrybut). Różne dziedziny wartości nie muszą być rozłączne Dziedzinę określa się przez podanie typu danych oraz dodatkowych ograniczeń (więzów) lub właściwości MS ACCESS: Nazwa pola Typ danych Nr Liczba Liczba całkowita >=0 i <=999 Nazwa Tekst Długość 30 znaków Ulica Tekst Długość 20 znaków KodMjc Liczba Liczba całkowita between 1 and 99 Telefon Tekst Maska 999-99 © Ludmiła Rekuć, Witold Rekuć Właściwości 71 Określoność wartości w kolumnach (wartości atrybutów) Firmy Nr Nazwa Ulica KodMjc Telefon 0 Nasza Firma Nasza 1 234 23 1 Abeja Abejowska 3 234 55 2 Audi Audiego 2 3 Pafawag Wagonowa 2 4 Iase Energetyczna 3 5 Dolmed Medyczna 1 6 Dolmel Wartość nieokreślona 256 12 Elektryczna 3 6 Zbiór dopuszczalnych numerów firm 452 34 Dolmel Elektryczna 3 Zbiór dopuszczalnych nazw firm © Ludmiła Rekuć, Witold Rekuć Zbiór dopuszczalnych nazw ulic Zbiór dopuszczalnych kodów miejscowości Zbiór dopuszczalnych numerów telefonów 81 Projektując tabelę dla pewnego zastosowania możemy rozstrzygnąć dla każdej kolumny: - czy wartość w kolumnie musi być zawsze określona, - czy wartość w kolumnie może być nieokreślona. Do oznaczenia wartości nieokreślonych stosuje się słowo NULL Telefon is NULL – telefon jest nieokreślony Telefon is not NULL – telefon jest określony Nieokreśloność wartości typu Tekst 6 Dolmel Elektryczna 3 Tekst niepusty Tekst nieokreślony lub pusty “452 34” - tekst określony niepusty “” - tekst określony pusty - tekst nieokreślony © Ludmiła Rekuć, Witold Rekuć 91 Nieokreśloność wartości w kolumnach i logika trójwartościowa 6 Dolmel Elektryczna 3 452 34 6 Dolmel Elektryczna 3 234 09 6 Dolmel Elektryczna 3 Telefon = “452 34” ? TRUE Telefon is Telefon is NULL? not NULL? FALSE TRUE FALSE FALSE TRUE UNKNOWN TRUE FALSE NULL Operacje na wartościach nieokreślonych X is NULL Y is not NULL lub is NULL X + Y is NULL © Ludmiła Rekuć, Witold Rekuć 101 Wartości domyślne (default) Firmy Nr Nazwa Ulica KodMjc Telefon 0 Nasza Firma Nasza 1 234 23 1 Abeja Abejowska 3 234 55 2 Audi Audiego 2 3 Pafawag Wagonowa 2 4 Iase Energetyczna 3 5 Dolmed Medyczna 1 Wartością domyślną danego atrybutu nazywamy wartość z dziedziny tego atrybutu, która ma być wstawiona przez system do każdego dodawanego wiersza 256 12 3 6 Zbiór dopuszczalnych numerów firm 452 34 Dolmel Elektryczna 3 Zbiór dopuszczalnych nazw firm © Ludmiła Rekuć, Witold Rekuć Zbiór dopuszczalnych nazw ulic Zbiór dopuszczalnych kodów miejscowości Zbiór dopuszczalnych numerów telefonów 111 Klucze tabeli Kluczem tabeli nazywamy zbiór atrybutów tabeli, które identyfikują wiersz tabeli i żaden jego podzbiór właściwy tej własności nie ma Dokumenty Nr NrSprzerdawcy NrNabywcy Data 1/02 0 2 13.02.02 2/02 0 3 21.03.02 1/02 1 0 03.01.02 3/02 0 1 31.04.02 2/02 3 0 17.02.02 4/02 0 4 13.05.02 © Ludmiła Rekuć, Witold Rekuć Kluczem w tabeli Dokumenty jest zbiór K = {Nr, NrSprzedawcy} 121 Inne przykłady: Osoba(Pesel, Nip, Nazwisko, Imię, DataUrodzenia) K1={Pesel}, K2={Nip} Egzamin(NrStudenta, KodPrzedmiotu, Data, Ocena) K={NrStudenta, KodPrzedmiotu, Data} PozycjeDokumentu(Nr, NrSprzedawcy, Np,SmbTow, CenaNetto, Ilość) K1={Nr, NrSprzedawcy, Np}, K2={Nr, NrSprzedawcy, SmbTow} ObrotyMiesięczne(Rok, Mc, Wartość) K={Rok, Mc} © Ludmiła Rekuć, Witold Rekuć 13 1 Kluczem podstawowym tabeli nazywamy klucz, który ze względu na pewne cechy praktyczne zostaje arbitralnie wybrany spośród kluczy tabeli Przykład: Przedmiot (Kod, Nazwa, Opis) K1={Kod}, K2={Nazwa} Kluczem podstawowy: K1 Zbiór atrybutów zawierający klucz nazywamy nadkluczem Przykład: Przedmiot (Kod, Nazwa, Opis) K1={Kod}, K2={Nazwa} Nadkluczem jest: {Kod, Opis} Określoność wartości kluczy Każdy klucz tabeli musi mieć wartość określoną (NULL jest niedopuszczalne) © Ludmiła Rekuć, Witold Rekuć 141 © Ludmiła Rekuć, Witold Rekuć 151 Przykład definicji tabeli w języku SQL (system PostgreSQL) create table "Firmy" ( Nr decimal(4) Nazwa varchar(30) Ulica varchar(30) KodMjc decimal(3) Telefon varchar(20) ); primary key check(Nr>=0), not null, not null, not null, 16 © Ludmiła Rekuć, Witold Rekuć 1 Operacje aktualizacji - dodaj nowy wiersz do tabel - usuń istniejący wiersz z tabeli - zmień wartości w istniejącym wierszu tabeli W aktualizacji bazy danych musimy zapewnić poprawność bazy danych: Poprawność formalna – zgodność bazy danych z regułami formalnymi Poprawność merytoryczna – zgodność bazy danych z rzeczywistością © Ludmiła Rekuć, Witold Rekuć 171 Poprawność formalna – więzy integralnościowe: więzy dziedziny – wartość atrybutu w tabeli musi należeć do dziedziny tego atrybutu lub jeżeli jest to dopuszczalne może być nieokreślona (NULL) więzy klucza – w tabeli nie mogą występować dwa lub więcej wierszy o tej samej wartości klucza; klucz musi mieć wartość określoną więzy integralności referencyjnej – patrz niżej inne więzy – patrz niżej © Ludmiła Rekuć, Witold Rekuć 181 Więzy dziedziny i klucza Firmy Dodaj wiersz Nr Nazwa Ulica KodMjc Telefon 0 Nasza Firma Nasza 1 234 23 1 Abeja Abejowska 3 234 55 2 Audi Audiego 2 3 Pafawag Wagonowa 2 4 Iase Energetyczna 3 5 Dolmed Medyczna 1 Informatyczna A1 -3 Makrosoft 256 12 NULL Naruszenie więzów dziedziny Dodaj wiersz NULL Makrosoft Informatyczna 1 NULL Naruszenie więzów klucza Dodaj wiersz © Ludmiła Rekuć, Witold Rekuć 2 Makrosoft Informatyczna 1 NULL 191 Więzy integralności referencyjnej Firmy Miejscowości Nr Nazwa Ulica KodMjc Telefon Kod 0 Nasza Firma Nasza 1 234 23 1 Wrocław DL 1 Abeja Abejowska 3 234 55 2 Opole OP 2 Audi Audiego 2 3 Pafawag Wagonowa 2 3 Wałbrzych DL 4 Iase Energetyczna 3 5 Dolmed Medyczna 1 Nazwa KodWoj 256 12 Dodaj do tabeli Firmy wiersz: 6 TP SA Telewizyjna 4 345 90 Usuń z tabeli Miejscowości wiersz: 2 Opole OP Pytanie do bazy danych: w jakich województwach mają siedziby firmy, z którymi handlujemy? © Ludmiła Rekuć, Witold Rekuć 201 Firmy Miejscowości Nr Nazwa Ulica KodMjc Telefon Kod 0 Nasza Firma Nasza 1 234 23 1 Wrocław DL 1 Abeja Abejowska 3 234 55 2 Opole OP 2 Audi Audiego 2 3 Wałbrzych DL 3 Pafawag Wagonowa 2 4 Iase Energetyczna 3 5 Dolmed Medyczna 1 Nazwa KodWoj 256 12 Dla każdego wiersza tabeli Firmy musi występować wiersz w tabeli Miejscowości taki, że: Firmy.KodMjc=Miejscowości.Kod Dla każdego wiersza tabeli Miejscowości może występować wiersz w tabeli Firmy taki, że: Firmy.KodMjc=Miejscowości.Kod © Ludmiła Rekuć, Witold Rekuć 21 1 Firmy Miejscowości Nr Nazwa Ulica KodMjc Telefon Kod 0 Nasza Firma Nasza 1 234 23 1 Wrocław DL 1 Abeja Abejowska 3 234 55 2 Opole OP 2 Audi Audiego 2 3 Wałbrzych DL 3 Pafawag Wagonowa 2 4 Iase Energetyczna 3 5 Dolmed Medyczna 1 256 12 Nazwa KodWoj Klucz = {Kod} Klucz = {Nr} Klucz obcy = {KodMjc} Dane są dwie tabele: To – zwana tabelą odwołania Td – zwana tabelą docelową Kluczem obcym tabeli To do tabeli Td nazywamy taki zbiór atrybutów To, którego wartości są wartościami klucza tabeli Td Więzy integralności referencyjnej Dla każdej wartości klucza obcego w tabeli odwołania musi istnieć wiersz w tabeli docelowej zawierający wartość tego klucza. 22 1 © Ludmiła Rekuć, Witold Rekuć Przykład: Student (Nr, Nazwisko, Adres) Klucz={Nr} Egzamin (NrStudenta, KodPrzedmiotu, Data, Ocena) Klucz={NrStudenta, KodPrzedmiotu, Data} KluczObcy do tabeli Student KO1={NrStudenta} KluczObcy do tabeli Przedmiot KO2={KodPrzedmiotu} Przedmiot (Kod, Nazwa) Klucz={Kod} Przykład: Dostawca (Kod, Nazwa, Ulica, KodMjc) Miejscowość (Kod, Nazwa) Dostawa (KodDostawcy, SmbTowaru, Data, Ilość) Towar (Symbol, Nazwa, Cena, Jm) Wskazać klucze i klucze obce! © Ludmiła Rekuć, Witold Rekuć 231 Jm © Ludmiła Rekuć, Witold Rekuć 241 Przykład definicji tabeli w języku SQL (system PostgreSQL) create domain "NumeryFirm" decimal(4) not null; -create table "Miejscowosci" ( Kod decimal(3) Nazwa varchar(30) ); -create table "Firmy" ( Nr "NumeryFirm" Nazwa varchar(30) Ulica varchar(30) KodMjc decimal(3) Telefon varchar(20) ); © Ludmiła Rekuć, Witold Rekuć primary key check(Kod>0), not null primary key check(Nr>=0), not null, not null, not null references "Miejscowosci"(Kod), 251 Inne więzy integralnościowe Więzy inne są specyficzne dla dziedziny zastosowań. Są one określone przez warunki, których niespełnienie byłoby świadectwem błędu w danych lub świadectwem naruszenia reguł organizacji, w której baza danych jest użytkowana. Przykłady: 1. Data dostawy nie może być wcześniejsza od daty zamówienia tej dostawy. 2. Dla każdego promotora liczba dyplomatów nie może być większa od 5. 3. Nie może być wykonane wypożyczenie książki czytelnikowi, który zalega ze zwrotem innych książek. © Ludmiła Rekuć, Witold Rekuć 261