Relacyjny Model Danych
Wykład 2
Prowadzący: dr Paweł Drozda
Definicja danych
Relacja – dwuwymiarowa tabela, jedyna
struktura danych w modelu relacyjnym
Każda relacja posiada atrybuty – kolumny.
Opisują dane umieszczane w relacji
Schemat relacji – nazwa relacji wraz z
atrybutami
Przykład schematu: Miasto (id, nazwa, id_regionu)
Krotki – wiersze relacji zawierające dane.
Każdy atrybut ma swój odpowiednik w krotce
dr P. Drozda
Cechy relacji
jednoznaczna nazwa relacji
jednoznaczne nazwy kolumn (atrybutów)
relacji
ten sam typ wartości w jednej kolumnie
porządek kolumn w relacji nieistotny
niedozwolone powtórzenia wierszy
nieistotny porządek wierszy (krotek)
wartości atomowe w polach relacji
dr P. Drozda
Przykłady
STUDENCI
Nr_indeksu
Nazwisko
Imię
Adres
1234
Kowalski
Jan
Akacjowa 8
2134
Nowak
Piotr
Dębowa 4
4321
Maliniak
Stefan
Bukowa 4
3298
Grabowska
Janina
Brzozowa 1
spełnia reguły
ZALICZENIA
Id_indeksu Id_indeksu
Ocena
Przedmiot
1234
(1234), (3214)
5
Bazy danych
3211
(3211), (4327)
b. dobry
Bazy danych
3211
(3211), (4327)
b. dobry
Bazy danych
dr P. Drozda
nie spełnia reguł
Definicja danych – klucze główne
każda relacja musi posiadać klucz główny
jedna lub więcej kolumn identyfikujących
jednoznacznie każdy wiersz tabeli
Klucz kandydujący – atrybut lub zbiór
atrybutów identyfikujących wiersze tabeli
(musi być jednoznaczny i nie zawierać
wartości null)
Klucz główny wybierany spośród kluczy
kandydujących
dr P. Drozda
Definicja danych
Dziedzina – zbiór wszystkich możliwych
wystąpień atrybutu (np. ocena_z_egzaminu
wartości od 2 do 5 – dziedzina 2-5) – każdy
atrybut posiada dziedzinę
Klucz obcy – kolumna bądź kolumny
będące kluczem głównym w innej tabeli,
sposób łączenia tabel (np. numer studenta
w tabeli Studenci i w tabeli Zaliczenia)
Wartość null – nieznana informacja (np.
brak numeru telefonu)
dr P. Drozda
Definicja dziedziny i relacji – przykład(1)
Domains
Nazwa Modułów: Character
Poziomy: {1,2,3}
Kody Kursów: Character
NryPrac: Integer
Statusy: {L, SL, PL, Reader, Prof, HOD}
NazwiskaPrac: Character
Relation: Wykładowcy
Attributes
NrPrac: NryPrac
NazwiskoPrac: NazwiskaPrac
Status: Statusy
Primary Key: NrPrac
dr P. Drozda
Definicja dziedziny i relacji – przykład(2)
Relation: Moduły
Attributes
NazwaModułu: NazwyModułów
Poziom: Poziomy
KodKursu: KodyKursów
NrPrac: NryPrac
Primary Key: NazwaModułu
Foreign Key: NrPrac references
dr P. Drozda
Przykład
STUDENCI
Nr_indeksu
Nazwisko
Imię
Adres
Klucz
1234
Kowalski
Jan
Akacjowa 8
główny
2134
Nowak
Piotr
Dębowa 4
4321
Maliniak
Stefan
Bukowa 4
3298
Grabowska
Janina
Brzozowa 1
Klucz główny
Klucz
obcy
ZALICZENIA
Id_indeksu Ocena
Przedmiot
1234
5
Bazy danych
3211
4
Bazy danych
3211
3
Matematyka
dr P. Drozda
Ćwiczenie
Nr_indeksu
Nazwisko
Imię
Adres
1234
Kowalski
Jan
Akacjowa 8
2134
Nowak
Piotr
Dębowa 4
4321
Maliniak
Stefan
Bukowa 4
3298
Grabowska
Janina
Brzozowa 1
Dla
danej relacji określ:
Atrybuty
Krotki
Składowe jednej krotki
Schemat relacji
Dziedzina dla każdego atrybutu
Inny równoważny sposób przedstawienia relacji
dr P. Drozda
Operowanie danymi
Algebra relacyjna – zbiór sześciu
operatorów do wyszukiwania danych
(selekcja, rzut, złączenie, suma,
przecięcie, różnica)
Operacje dynamiczne na relacjach
INSERT – wstawianie
DELETE – usuwanie
UPDATE – modyfikowanie
dr P. Drozda
Selekcja - ograniczenie
Wydobywa wszystkie informacje z relacji z
interesującymi użytkownika danymi – nie bierze
pod uwagę wszystkich krotek
Przykład:
Restrict STUDENCI where imię = ‘JAN’
odpowiednik w SQL: SELECT * FROM STUDENCI
where imię=‘Jan’;
Wynikiem powyższych zapytań jest relacja
Nr_indeksu
Nazwisko
Imię
Adres
1234
Kowalski
Jan
Akacjowa 8
dr P. Drozda
Rzut – projekcja (1)
ogranicza liczbę
atrybutów
Przykład:
PRACOWNICY
Pracownik
Nazwisko
Imię
Płaca
1
Stefanek
Michał
3000 zł
2
Dębek
Jarosław
2340 zł
3
Kowalski
Jan
4600 zł
dr P. Drozda
Rzut (2)
Wynik zapytania:
PROJECT Pracownicy (Nazwisko, Płaca)
SELECT Nazwisko, Płaca from Pracownicy
jest następujący:
Nazwisko
Płaca
Stefanek
3000 zł
Dębek
2340 zł
Kowalski
4600 zł
dr P. Drozda
Operowanie danymi
Złączenia – oparte na relacyjnym
operatorze iloczynu kartezjańskiego
Typy złączeń
Iloczyn kartezjański
Równozłączenie
Złączenie naturalne
Złączenia zewnętrzne
Lewostronne złączenie zewnętrzne
Prawostronne złączenie zewnętrzne
Obustronne złączenie zewnętrzne
dr P. Drozda
Iloczyn kartezjański
Powstaje poprzez połączenie dwóch relacji
w jedną zawierającą wszystkie możliwe
kombinacje wierszy tabel wejściowych
Przykład
Nr_indeksu
Nazwisko
Imię
nr_indeksu
Ocena
1234
Kowalski
Jan
3214
2
6587
Małek
Michał
1234
5
1243
Nowak
Piotr
dr P. Drozda
Iloczyn kartezjański
Cd przykładu: relacja wynikowa
Nr_indeksu
Nazwisko
Imię
nr_indeksu
Ocena
1234
Kowalski
Jan
3214
2
6587
Małek
Michał
3214
2
1243
Nowak
Piotr
3214
2
1234
Kowalski
Jan
1234
5
6587
Małek
Michał
1234
5
1243
Nowak
Piotr
1234
5
dr P. Drozda
Równozłączenie
Iloczyn kartezjański dla którego dokonana
jest selekcja poprzez wybór wierszy dla
których wartość kluczy podstawowego i
obcego są takie same
Przykład
Nr_indeksu
Nazwisko
Imię
nr_indeksu
Przedmiot
Ocena
1234
Kowalski
Jan
6587
Bazy danych
2
6587
Małek
Michał
1243
Filozofia
4
1243
Nowak
Piotr
1243
Bazy danych
3
1234
Statystyka
5
dr P. Drozda
Równozłączenie
cd przykładu: tabela wynikowa
Nr_indeksu
Nazwisko
Imię
nr_indeksu
Przedmiot
Ocena
1234
Kowalski
Jan
1234
Statystyka
5
6587
Małek
Michał
6587
Bazy danych
2
1243
Nowak
Piotr
1243
Filozofia
4
1243
Nowak
Piotr
1243
Bazy danych
3
dr P. Drozda
Złączenie naturalne
Podobne do równozłączenia – usuwa jedną
z kolumn po której relacje są łączone
Dla poprzedniego przykładu tabel wynikowa
Nr_indeksu
Nazwisko
Imię
Przedmiot
Ocena
1234
Kowalski
Jan
Statystyka
5
6587
Małek
Micha
ł
Bazy danych
2
1243
Nowak
Piotr
Filozofia
4
1243
Nowak
Piotr
Bazy danych
3
dr P. Drozda
Złączenia zewnętrzne
Stosowane gdy zachowane mają zostać
wszystkie wiersze jednej lub drugiej relacji
(nawet gdy nie występują odpowiedniki w
obu relacjach)
Nr_prac
Nazwisko
Imię
1
Golał
Jan
6
Resko
Paweł
3
Janik
Tadeusz
4
Ferel
Michał
IdPrzed
Przedmiot
Prowadząc
y
2
Bazy danych
null
5
Filozofia
4
6
Analiza matematyczna
3
3
Statystyka
3
dr P. Drozda
Złączenie lewostronne
Zachowuje nie pasujące wiersze z relacji
będącej pierwszym argumentem złączenia
Wynik złączenia dla przykładu z
poprzedniego slajdu
Nr_prac
Nazwisko
Imię
IdPrzed
Przedmiot
Prowadząc
y
1
Golał
Jan
null
null
null
6
Resko
Paweł
null
null
null
3
Janik
Tadeusz
6
Analiza matematyczna
3
3
Janik
Tadeusz
3
Statystyka
3
4
Ferel
Michał
5
Filozofia
4
dr P. Drozda
Złączenie prawostronne
Zachowuje nie pasujące wiersze z relacji
będącej drugim argumentem złączenia
Wynik złączenia
Nr_prac
Nazwisko
Imię
IdPrzed
Przedmiot
Prowadząc
y
null
null
null
2
Bazy danych
null
3
Janik
Tadeusz
6
Analiza matematyczna
3
3
Janik
Tadeusz
3
Statystyka
3
4
Ferel
Michał
5
Filozofia
4
dr P. Drozda
Złączenie obustronne
Zachowuje nie pasujące wiersze z obydwu
relacji
Wynik złączenia
Nr_prac
Nazwisko
Imię
IdPrzed
Przedmiot
Prowadząc
y
null
null
null
2
Bazy danych
null
3
Janik
Tadeusz
6
Analiza matematyczna
3
3
Janik
Tadeusz
3
Statystyka
3
4
Ferel
Michał
5
Filozofia
4
1
Golał
Jan
null
null
1
6
Resko
Paweł
null
null
6
dr P. Drozda
Pozostałe operatory
stosowane dla zgodnych relacji
- ta sama liczba argumentów w
relacjach, ta sama dziedzina dla
odpowiadających argumentów
analogicznie do algebry zbiorów
dr P. Drozda
Pozostałe operatory
Przykład
PRACOWNICY
KIEROWNICY
Nr_prac
Nazwisko
Imię
Nr_prac
Nazwisko
Imię
1
Golał
Jan
1
Golał
Jan
2
Maser
Paweł
6
Resko
Regina
3
Jawosz
Magda
7
Janik
Tadeusz
4
Ferel
Michał
9
Rewak
Piotr
dr P. Drozda
Pozostałe operatory
Przecięcie
Suma
Nr_prac
Nazwisko
Imię
Nr_prac
Nazwisko
Imię
1
Golał
Jan
1
Golał
Jan
2
Maser
Paweł
3
Jawosz
Magda
4
Ferel
Michał
6
Resko
Regina
7
Rewak
Piotr
9
Janik
Tadeusz
dr P. Drozda
Pozostałe operatory
Różnica A-B
Różnica A-B
Nr_prac
Nazwisko
Imię
Nr_prac
Nazwisko
Imię
2
Maser
Paweł
6
Resko
Regina
3
Jawosz
Magda
7
Rewak
Piotr
4
Ferel
Michał
9
Janik
Tadeusz
dr P. Drozda
Języki zapytań
składanie operatorów w celu wydobycia
informacji z bazy danych
Przykład – znaleźć wszystkie przedmioty
prowadzone przez Janika
PRACOWNICY
PRZEDMIOTY
Nr_prac
Nazwisko
Imię
IdPrzed
Przedmiot
Prowadząc
y
1
Golał
Jan
2
Bazy danych
null
6
Resko
Paweł
5
Filozofia
4
3
Janik
Tadeusz
6
Analiza matematyczna
3
4
Ferel
Michał
3
Statystyka
3
dr P. Drozda
Języki zapytań
Przykład cd
Proceduralny język zapytań
Join PRACOWNICY with PRZEDMIOTY -> R1
SELECT R1 where Nazwisko=‘Janik’ -> R2
PROJECT R2(Przedmiot) ->R3
SQL
select Przedmiot from PRACOWNICY inner join
PRZEDMIOTY on PRACOWNICY.Nr_prac =
PRZEDMIOTY.Prowadzacy where Nazwisko=‘Janik’;
dr P. Drozda
Operacje dynamiczne
INSERT (wart1, wart2, …) INTO tabela –
wstawia do tabeli wartości wart1, wart2, …
Przykład
INSERT (10, ‘Banach’, ‘Jacek’) INTO
PRACOWNICY spowoduje dodanie wiersza do
relacji PRACOWNICY
DELETE tabela WITH warunek – usuwa z
tabeli krotki określone w warunku
Przykład
DELETE PRZEDMIOTY WITH Prowadzący = 3 –
usunie krotki dotyczące analizy matematycznej
i statystyki
dr P. Drozda
Operacje dynamiczne
UPDATE tabela WHERE warunek SET
nazwaKolumny = wartosc – zmienia
w krotkach określonych w warunku
kolumnę nazwaKolumny na podaną
wartość
Przykład
UPDATE PRZEDMIOTY WHERE
prowadzący=3 SET prowadzący=1 –
zmienia prowadzącego przedmiotów
analiza matematyczna i statystyka
dr P. Drozda
Integralność danych
Integralność danych zapewnia
dokładne odbicie rzeczywistości w
bazie danych
W modelu relacyjnym istnieją dwa
rodzaje integralności wewnętrznej
integralność encji
integralność referencyjna
dr P. Drozda
Integralność encji
Dotyczy kluczy głównych
Każda relacja musi mieć klucz główny
Klucz główny musi być jednoznaczny i nie może zawierać wartości null (co
skutkuje jednoznacznością krotek w relacji)
Przykład
kluczem głównym w
tej relacji może być
Nr_prac, nazwisko lub imię
PRACOWNICY
Nr_prac
Nazwisko
Imię
1
Golał
Jan
2
Resko
Paweł
3
Janik
Tadeusz
4
Ferel
Michał
dr P. Drozda
Integralność referencyjna
Dotyczy kluczy obcych
dwie możliwości (w zależności od konkretnej
bazy danych)
- Wartość klucza obcego musi odwoływać się
do wartości klucza głównego w tabeli w bazie
danych
- Wartość klucza obcego może być null
- Wymuszenie istnienia odniesienia każdego
wiersza – parametr not null
dr P. Drozda
Integralność referencyjna
Przykład
Nr_prac
Nazwisko
Imię
IdPrzed
Przedmiot
Prowadząc
y
1
Golał
Jan
2
Bazy danych
null
6
Resko
Paweł
5
Filozofia
4
3
Janik
Tadeusz
6
Analiza matematyczna
3
4
Ferel
Michał
3
Statystyka
3
Integralność referencyjna zachowana, jeśli są dopuszczane
wartości null klucza obcego (klucze obce mogą należeć do zbioru
{1,3,4,6})
dr P. Drozda
Zachowanie integralności referencyjnej
Określenie więzów propagacji – określają
co ma się stać z tabelą przy modyfikacji
powiązanej tabeli
Ograniczone usuwanie – usunięcie krotki z
kluczem głównym możliwe w momencie, gdy
klucz główny nie ma wystąpień jako klucz obcy
Dla poprzedniego przykładu – z tabeli
pracownicy można usunąć pracowników o
numerach 1 i 6. Pozostali mogą zostać usunięci
dopiero w momencie gdy zostaną usunięte
odpowiednie krotki w powiązanej tabeli
dr P. Drozda
Zachowanie integralności referencyjnej
Kaskadowe usuwanie
Przy usunięciu wiersza z kluczem głównym
zostają usunięte wszystkie wiersze z tym kluczem
z relacji powiązanej
Jeśli usuniemy z tabeli PRACOWNICY pracownika o
numerze 3 – zostaną usunięte Przedmioty o
numerach 6 i 3 z tabeli PRZEDMIOTY
Wstaw null – przy usunięciu krotki z kluczem
głównym zostają wstawione wartości null zamiast
klucza obcego
Wstaw default – przy usuwaniu wstawia wartość
domyślną
dr P. Drozda
Integralność dodatkowa
Definiowana przez użytkownika –
specyficzna dla każdej bazy danych
Przykład
Możemy wymusić, że każdy pracownik musi
prowadzić jakieś zajęcia
CONSTRAINT (Project PRACOWNICY(Nr_prac))
– (Project PRZEDMIOTY(Prowadzący)) is empty
dr P. Drozda