background image

n224 ;)  

 

 

1.Co to jest model danych? Wymień poznane modele danych. Scharakteryzuj jeden 
z nich. 
 
Model bazy danych to zbiór zasad (specyfikacji), opisujących strukturę danych 
w bazie danych. Określane są również dozwolone operacje. Definiuje się 
strukturę danych poprzez specyfikację reprezentacji dozwolonych w modelu 
obiektów (encji) oraz ich związków. W informatyce głównymi modelami baz 
danych są: 
hierarchiczny model danych, 
relacyjny model danych, 
grafowy (sieciowy) model danych, 
obiektowy model danych, 
sieci semantyczne, 
obiektowy-relacyjny, 

1.  Model hierarchiczny: 

- W modelu hierarchicznym dane są przechowywane na zasadzie rekordów 
nadrzędnych-podrzędnych, tzn. rekordy przypominają strukturę drzewa. 
Każdy rekord (z wyjątkiem głównego) jest związany z dokładnie jednym 
rekordem nadrzędnym. 
Dane w takim modelu są znajdowane na zasadzie wyszukiwania rekordów 
podrzędnych względem rekordu nadrzędnego. Przykładem takiego modelu 
może być struktura katalogów na dysku twardym komputera.  

2.  Model relacyjny:  

- Dane w takim modelu przechowywane są w tabelach, z których każda ma 
stałą liczbę kolumn i dowolną liczbę wierszy. Każda tabela (relacja) ma 
zdefiniowany klucz danych (key) - wyróżniony atrybut lub kilka takich 
atrybutów, którego wartość jednoznacznie identyfikuje dany wiersz. 
Wyszukiwanie danych odbywa się za pomocą odwołania się programu do 
danego klucza i identyfikacji danego wiersza za jego pomocą. 

Inny podział : 
Proste modele danych. Dane zorganizowane są w strukturę rekordów zgrupowanych 
w plikach. Głównymi dostępnymi operacjami są operacje na rekordach 
(ewentualnie na ich poszczególnych polach). Z tego rodzaju modelem danych 
mieliśmy do czynienia dotąd na ćwiczeniach. 
Klasyczne modele danych. Należą do nich modele hierarchiczne, sieciowe i 
relacyjne. Modele relacyjne stanowią najbardziej popularną obecnie podstawę 
architektur systemów baz danych. 
Semantyczne modele danych. Semantyka to inaczej znaczenie. Klasyczne modele 
danych nie dostarczają łatwego sposobu odczytania informacji o semantyce 
danych, stąd podejmuje się próby stworzenia innych modeli, uzupełniających 
ten brak. Przykładem częściowej realizacji tego programu są obiektowe modele 
danych. 
 
2. Wyjaśnij pojęcia: dane, struktury danych , model danych, krotka, encja, 
atrybut, typ danych . 
Dane – zbiór liczb i tekstów w różnych formach, dane mogą  byc przezentowane 
bądź przetwarzane 
Struktury danych - sposób uporządkowania informacji w komputerze. Na 
strukturach danych operują algorytmy. Strukturami danych mogą byc: rekord, 
tablica, lista, stos, kolejka, drzewo, graf 
Model danych - to zbiór zasad (specyfikacji), opisujących strukturę danych. 
Krotka (ang. tuple) - struktura danych będąca odzwierciedleniem matematycznej 
n-tki, tj. uporządkowanego ciągu wartości. Krotki przechowują stałe wartości 
o różnych typach danych - nie można zmodyfikować żadnego elementu, odczyt 
natomiast wymaga podania indeksu liczbowego żądanego elementu. 
Encja (ang. entity) w bazach danych to reprezentacja wyobrażonego lub 
rzeczywistego obiektu (grupy obiektów) stosowana przy modelowaniu danych 

background image

n224 ;)  

 

 

podczas analizy informatycznej. Formalnie jest to pojęcie niedefiniowalne, a 
podstawową cechą encji jest to, że jest rozróżnialna od innych encji. 
Atrybut – cecha charakterystyczna encji 
Typ danych - opis rodzaju, struktury i zakresu wartości, jakie może 
przyjmować dany literał, zmienna, stała, argument, wynik funkcji lub wartość 
 
3. Co to jest normalizacja danych? Czemu ona służy? 
- Normalizacja bazy danych jest to proces mający na celu eliminację 
powtarzających się danych w relacyjnej bazie danych. Główna idea polega na 
trzymaniu danych w jednym miejscu, a w razie potrzeby linkowania do danych. 
Taki sposób tworzenia bazy danych zwiększa bezpieczeństwo danych i zmniejsza 
ryzyko powstania niespójności (w szczególności problemów anomalii). 
Istnieją sposoby ustalenia czy dany schemat bazy danych jest 
"znormalizowany", a jeżeli jest to jak bardzo. Jednym ze sposobów jest 
przyrównanie danej bazy do schematów zwanych postaciami normalnymi (ang. 
normal forms lub NF). Normalizacja bazy danych do konkretnej postaci może 
wymagać rozbicia dużych tabel na mniejsze i przy każdym wykonywaniu zapytania 
do bazy danych ponownego ich łączenia. Zmniejsza to wydajność, więc w 
niektórych przypadkach świadoma denormalizacja (stan bez normalizacji) jest 
lepsza - zwłaszcza w systemach niekorzystających z modelu relacyjnego (np. 
OLAP). 
- Normalizacja nie usuwa danych, tylko zmienia schemat bazy danych. 
Normalizacja przeprowadza bazę danych z jednego stanu spójnego (przed 
normalizacją) w inny stan spójny (po normalizacji). Jedyna różnica polega na 
innym układzie danych i relacji pomiędzy nimi, ale bez utraty danych 
(ewentualnie dodawane są nowe klucze główne). 
 
4.Dokonaj podziału składni języka SQL. Scharakteryzuj wybraną grupę poleceń. 
Podział : 
- Data definition language 
- Data manipulation language 
- Data controll language 
DML (Data Manipulation Language) służy do wykonywania operacji na danych – do 
ich umieszczania w bazie, kasowania, przeglądania, zmiany. Najważniejsze 
polecenia z tego zbioru to: 
SELECT – pobranie danych z bazy, 
INSERT – umieszczenie danych w bazie, 
UPDATE – zmiana danych, 
DELETE – usunięcie danych z bazy. 
Dane tekstowe muszą być zawsze ujęte w znaki pojedynczego cudzysłowu ('). 
Dzięki DDL (Data Definition Language) można operować na strukturach, w 
których dane są przechowywane – czyli np. dodawać, zmieniać i kasować tabele 
lub bazy. Najważniejsze polecenia tej grupy to: 
CREATE (np. CREATE TABLE, CREATE DATABASE, ...) – utworzenie struktury (bazy, 
tabeli, indeksu itp.), 
DROP (np. DROP TABLE, DROP DATABASE, ...) – usunięcie struktury, 
ALTER (np. ALTER TABLE ADD COLUMN ...) – zmiana struktury (dodanie kolumny do 
tabeli, zmiana typu danych w kolumnie tabeli). 
DCL (Data Control Language) ma zastosowanie do nadawania uprawnień do 
obiektów bazodanowych. Najważniejsze polecenia w tej grupie to: 
GRANT (np. GRANT ALL PRIVILEGES ON EMPLOYEE TO PIOTR WITH GRANT OPTION) – 
przyznanie wszystkich praw do tabeli EMPLOYEE użytkownikowi PIOTR z opcją 
pozwalającą mu nadawać prawa do tej tabeli. 
REVOKE – odebranie użytkownikowi wszystkich praw do tabeli, które zostały 
przyznane poleceniem GRANT. 
DENY 

background image

n224 ;)  

 

 

 
5. Co to są wyzwalacze ? Jak tworzy się I korzysta z wyzwalaczy w relacyjnych 
bazach danych ? 
Wyzwalacz (ang. trigger) jest to procedura wykonywana automatycznie jako 
reakcja na pewne zdarzenia w tabeli bazy danych. Wyzwalacze mogą ograniczać 
dostęp do pewnych danych, rejestrować zmiany danych lub nadzorować 
modyfikacje danych. 
Tworzenie w PosgreSQL : 
CREATE TRIGGER nazwa { BEFORE | AFTER } { zdarzenie [ OR ... ] } 
ON tabela [ FOR [ EACH ] { ROW | STATEMENT } ] 
EXECUTE PROCEDURE nazwafunkcji ( argumenty ) 
Istnieje kilka typów wyzwalaczy. Wyzwalacze BEFORE - wykonywane przed 
instrukcją generującą zdarzenie. Wyzwalacze AFTER są wykonane po instrukcji 
generującej zdarzenie. W niektórych bazach danych są również wyzwalacze 
INSTEAD OF - są one wykonywane zamiast instrukcji generującej zdarzenie. 
Istnieją trzy typowe zdarzenia powodujące wykonanie wyzwalaczy: 
- dopisanie nowego rekordu do bazy danych w wyniku wykonania instrukcji 
INSERT, 
- zmiana zawartości rekordu w wyniku wykonania instrukcji UPDATE oraz 
- usunięcie rekordu w wyniku wykonania instrukcji DELETE. 
Główne cechy wyzwalaczy to: 
- nie mogą mieć parametrów (ale mogą zapisywać dane w tabelach tymczasowych) 
- nie mogą zatwierdzać transakcji (COMMIT) ani ich wycofywać (ROLLBACK) 
ponieważ działają w kontekście instrukcji SQL, która spowodowała ich 
uruchomienie  
- mogą generować dodatkowe błędy, jeżeli są źle napisane. 
 
6. XML a bazy danych . Rozwiń zagadnienie. 
 
7. Co to są funkcje w bazach danych. Jak funkcje się tworzy i jak z nich 
korzysta. 
Funkcją w bazie danych nazywamy zdeficniowany „podprogram” pomagający nam 
reprezentowac, lub oddziaływac na dane w bazie danych 
Deklaracja funkcji : 
CREATE [ OR REPLACE] FUNCTION 
nazwa_funkcji ([typ_argumentu [, …]]) [RETURNS typ_wyniku] 
AS ‘ 
DECLARE 
        --deklaracje zmiennych, skladnia: 
        nazwa [CONSTANT] typ [NOT NULL] [:=wartość] 
        /*CONSTANT sprawia, że wartości zmiennej nie można zmieniać 
        NOT NULL sprawia, że wartości zmiennej nie można przypisać wartości 
NULL*/ 
        np.:  
        n1 integer; 
BEGIN 
        instrukcje 

Po BEGIN można tworzyć nowe bloki, (zmienne mają zasięg w 
zadeklarowanym bloku) // zagniezdzenie jak w pascalu [begin/end] 

 
        RETURN [wartość] --obowiązkowo funkcja musi zwracać wartość 
END; 
‘ LANGUAGE 'plpgsql' 
 
Uzywanie funkcji :  
 
Select * from nazwafunkcji(argument) 

background image

n224 ;)  

 

 

 
8. Co to są funkcje agregacji ? Podaj przykłady. 
Agregacje to funkcje działające na grupach danych. Można powiedzieć (niezbyt 
ściśle), że zwracają one  pewną wypadkową pojedynczą wartość z kilku 
rekordów, np.  liczbę rekordów, średnią obliczoną z wartości w jakiejś 
kolumnie itp 
W PSQL: 
 --> SELECT count(*) from NazwaTabeli | Zlicza Wszystko 
 --> SELECT count(Kolumna) from NazwaTabeli  | Zlicza wszystko po kolumnach 
 --> SELECT max(kolumna) from NazwaTabei | Pokazuje max z Tabeli 
 --> SELECT min(kolumna) from NazwaTabeli | Pokazuje min z tabeli 
 --> SELECT avg(kolumna) from NazwaTabeli | Pokazuje srednia z tabeli 
 
9. W jaki sposób przydziela się i odbiera uprawnienia w bazach danych ? 
// Zywcem zerznalem 
Pierwsza część kursu języka SQL. Omówione zostały polecenia: GRANT i REVOKE, 
czyli tworzenie użytkownika oraz nadawanie i odbieranie uprawnień. 
Pierwszym etapem tworzenia bazy danych jest stworzenie tabel w których 
przechowywane będą później wszelkie dane. Zanim jednak do tego przystąpimy 
niektóre serwery będą wymagały zalogowania się przy pomocy nazwy użytkownika 
i jego hasła. Możemy w tym przypadku korzystać z konta administratora 
skonfigurowanego podczas instalacji serwera baz danych. Innym rozwiązaniem 
jest utworzenie nowego użytkownika i dodanie go do bazy danych. 
Powyższą czynność wykonamy przy użyciu polecenia GRANT, którego składnia jest 
następująca: 
GRANT lista_praw_dostępu ON nazwa_tabeli TO nazwa_uzytkownika 
Pole „lista_praw_dostępu” może zawierać jedno, lub kilka z poniższych 
uprawnień: 
• SELECT– odczytanie danych z tabeli 
• INSERT – wstawianie danych do tabeli 
• UPDATE – modyfikowanie danych w tabeli 
• DELETE – usunięcie danych z tabeli 
• REFERENCE – odwoływanie się do innych tabel 
• CREATE – tworzenie nowych tabel i baz danych 
• DROP – usuwanie tabel oraz baz danych 
• ALL PRIVILEGES – wszystkie dostępne uprawnienia 
Pole „nazwa tabeli” określa tabelę do której przyznajemy uprawnienia 
użytkownikowi wskazanemu w „nazwa użytkownika”. 
Przykład 1: 
Utworzymy użytkownika o nazwie „biuro” któremu nadamy prawa tylko do odczytu, 
wstawiania oraz modyfikowania danych, a więc SELECT, INSERT, UPDATE dla 
tabeli o nazwie „klienci”. 
GRANT SELECT, INSERT, UPDATE ON klienci TO biuro 
Przykład 2: 
Tworzymy użytkownika o nazwie „szef” któremu nadajemy wszelkie możliwe 
uprawnienia dla tabeli „klienci”. 
GRANT ALL PRIVILEGES ON klienci TO szef 
Przykład 3: 
W pierwszym przykładzie utworzyliśmy użytkownika o nazwie „biuro” nadając mu 
prawa tylko do odczytu, wstawiania oraz modyfikowania danych w tabeli. Teraz 
chcielibyśmy aby mógł również usuwać dane z tabeli „klienci”. 
W tym przypadku możemy ponownie skorzystać z polecenia GRANT podając nazwę 
wszystkich praw dla danego użytkownika. 
GRANT SELECT, INSERT, UPDATE, DELETE ON klienci TO biuro 
SQL umożliwia także odbieranie wcześniej nadanych uprawnień, a służy do tego 
polecenie REVOKE, którego składnia jest następująca: 
REVOKE lista_praw_dostępu ON nazwa_tabeli FROM nazwa_uzytkownika 

background image

n224 ;)  

 

 

Przykład: 
Stwierdziliśmy, iż użytkownik „biuro” nie powinien mieć możliwości wstawiania 
nowych danych do tabeli „klienci”. Należy więc usunąć mu prawo używania 
polecenia INSERT. 
REVOKE INSERT ON klienci FROM biuro 
 
10.Co to są struktury danych? 
Struktury danych - sposób uporządkowania informacji w komputerze. Na 
strukturach danych operują algorytmy. Strukturami danych mogą byc: rekord, 
tablica, lista, stos, kolejka, drzewo, lista. 
Tablica – kontener danych, w którym poszczególne komórki dostępne są za 
pomocą kluczy, które najczęściej przyjmują wartości numeryczne 
Rekord – to zestaw danych, zazwyczaj posiadający ustaloną wewnętrzną 
strukturę, stanowiący pewną całość, ale mogący być częścią większego zbioru 
podobnych rekordów. 
Stos – liniowa struktura danych, w której dane dokładane są na wierzch stosu 
i z wierzchołka stosu są pobierane (bufor typu LIFO, Last In, First Out; 
ostatni na wejściu, pierwszy na wyjściu). 
Kolejka – liniowa struktura danych, w której nowe dane dopisywane są na końcu 
kolejki, a z początku kolejki pobierane są dane do dalszego przetwarzania 
(bufor typu FIFO, First In, First Out; pierwszy na wejściu, pierwszy na 
wyjściu). 
Drzewo – W naturalny sposób reprezentuje hierarchię danych (obiektów 
fizycznych i abstrakcyjnych, pojęć, itp.) jest więc stosowane głównie do tego 
celu. Drzewa ułatwiają i przyspieszają wyszukiwanie, a także pozwalają w 
łatwy sposób operować na posortowanych danych. 
Lista - rodzaj kontenera - dynamiczna struktura danych, używana w 
informatyce. Składa się z podstruktur wskazujących na następniki i/lub 
poprzedniki. 
 
11.Co to są związki w bazach danych. Opisz podstawowe rodzaje związków. 
W modelu relacyjnym baz danych "relacja" to formalne określenie tabeli, czyli 
wydzielonym logicznie zbiorem danych, zorganizowanych w formie tabeli 
składającej się z wierszy dzielonych na kolumny. Jest to obiekt teoretyczny i 
nie należy go mylić z jej graficzną reprezentacją, czy miejscem zajmowanym w 
pamięci komputera. W zależności od typu bazy danych wewnętrzna organizacja 
podziału danych na kolumny i wiersze jest różna i często umowna. 
1. Relacja jeden-do-jednego 
 
W relacji jeden-do-jednego każdy rekord w tabeli A może mieć tylko jeden 
dopasowany rekord z tabeli B, i tak samo każdy rekord w tabeli B może mieć 
tylko jeden dopasowany rekord z tabeli A. Ten typ relacji spotyka się rzadko, 
ponieważ większość informacji powiązanych w ten sposób byłoby zawartych w 
jednej tabeli. Relacji jeden-do-jednego można używać do podziału tabeli z 
wieloma polami, do odizolowania części tabeli ze względów bezpieczeństwa, 
albo do przechowania informacji odnoszącej się tylko do podzbioru tabeli 
głównej. 
2. Relacja jeden-do-wielu 
Relacja jeden-do-wielu jest najbardziej powszechnym typem relacji. W relacji 
jeden-do-wielu rekord w tabeli A może mieć wiele dopasowanych do niego 
rekordów z tabeli B, ale rekord w tabeli B ma tylko jeden dopasowany rekord w 
tabeli A. 
3. Relacja wiele-do-wielu 
W relacji wiele-do-wielu, rekord w tabeli A może mieć wiele dopasowanych do 
niego rekordów z tabeli B i tak samo rekord w tabeli B może mieć wiele 
dopasowanych do niego rekordów z tabeli A. Jest to możliwe tylko przez 
zdefiniowanie trzeciej tabeli (nazywanej tabelą łącza), której klucz 

background image

n224 ;)  

 

 

podstawowy składa się z dwóch pól ž kluczy obcych z tabel A i B. Relacja 
wiele-do-wielu jest w istocie dwiema relacjami jeden-do-wielu z trzecią 
tabelą. Na przykład, tabele "Zamówienia" i "Produkty" są powiązane relacją 
wiele-do-wielu zdefiniowaną przez utworzenie dwóch relacji jeden-do-wielu z 
tabelą "Opisy zamówień". 
 
12. Co to jest normalizacja danych ? Jakie są podstawowe cele normalizacji ? 
- Normalizacja bazy danych jest to proces mający na celu eliminację 
powtarzających się danych w relacyjnej bazie danych. Główna idea polega na 
trzymaniu danych w jednym miejscu, a w razie potrzeby linkowania do danych. 
Taki sposób tworzenia bazy danych zwiększa bezpieczeństwo danych i zmniejsza 
ryzyko powstania niespójności (w szczególności problemów anomalii). 
Istnieją sposoby ustalenia czy dany schemat bazy danych jest 
"znormalizowany", a jeżeli jest to jak bardzo. Jednym ze sposobów jest 
przyrównanie danej bazy do schematów zwanych postaciami normalnymi (ang. 
normal forms lub NF). Normalizacja bazy danych do konkretnej postaci może 
wymagać rozbicia dużych tabel na mniejsze i przy każdym wykonywaniu zapytania 
do bazy danych ponownego ich łączenia. Zmniejsza to wydajność, więc w 
niektórych przypadkach świadoma denormalizacja (stan bez normalizacji) jest 
lepsza - zwłaszcza w systemach niekorzystających z modelu relacyjnego (np. 
OLAP). 
- Normalizacja nie usuwa danych, tylko zmienia schemat bazy danych. 
Normalizacja przeprowadza bazę danych z jednego stanu spójnego (przed 
normalizacją) w inny stan spójny (po normalizacji). Jedyna różnica polega na 
innym układzie danych i relacji pomiędzy nimi, ale bez utraty danych 
(ewentualnie dodawane są nowe klucze główne). 
 
13. Wymień operacje w algebrze relacyjnej. Krótko scharakteryzuj wybraną 
(zadana przez prowadzącego). 
Algebra relacyjna, proceduralny model operowania danymi, zbiór relacji bazy 
danych rozpatrywany z ośmioma działaniami określonymi na następujących 
relacjach: selekcja, rzut, złączenie oraz suma, iloczyn, przecięcie, różnica 
i iloraz. 
 
Selekcja bierze jedną relacje jako swój argument i produkuje w wyniku jedną 
relację, wydobywa z wejściowej relacji wiersze, które pasują do podanego 
warunku, i przekazuje je do relacji wynikowej,może być uważana za „poziomą 
maszynę do cięcia”. 
 
Rzut bierze jedną relacje jako swój argument i produkuje w wyniku jedną 
relację. Rzut jest „pionową maszyną do cięcia”. Rzut usuwa z wejściowej 
relacji kolumny, a pozostałe umieszcza w relacji wyjściowej. 
 
Iloczyn - argumentami są dwie relacje i produkowana jedna relacja wynikowa 
złożona ze wszystkich możliwych kombinacji wierszy z wejściowych tabel. 
Operator rzadko używany ze względu na możliwość generowania „eksplozji 
informacyjnej”. 
 
Równo złączenie jest iloczynem kartezjańskim, po którym jest wykonywana 
selekcja - zostają tylko te wiersze, których wartości w kolumnach złączenia 
są takie same. 
 
Suma, przecięcia oraz różnica: Argumentami operatorów są dwie zgodne relacje, 
wynikiem relacja wynikowa. 
 
Relacje zgodne – to relacje, które mają taką samą strukturę – te same kolumny 
określone na tych samych dziedzinach. 

background image

n224 ;)  

 

 

 
W wyniku sumy otrzymujemy relację zawierającą wiersze (krotki) z obu relacji. 
W wyniku przecięcia uzyskujemy wiersze wspólne dwóch relacji. 
W wyniku różnicy otrzymujemy wiersze należące do pierwszej relacji i nie 
należące do drugiej. 
 
14. W jaki sposób zapisuje się relacje wiele-do-wielu w relacyjnych bazach 
danych ? 
 
W relacji wiele-do-wielu rekord w jednej tabeli jest powiązany z wieloma 
rekordami w innej tabeli, a rekord w drugiej tabeli jest powiązany z wieloma 
rekordami w pierwszej tabeli. 
 
Ten typ relacji wymaga trzeciej tabeli zwanej tabelą skrzyżowań. W tabeli 
skrzyżowań znajdują się klucze podstawowe z pozostałych dwóch tabel, które są 
kluczami obcymi tej tabeli. 
 
Na przykład między tabelami Zamówienia i Produkty istnieje relacja typu 
wiele-do-wielu. Jedno zamówienie może zawierać wiele produktów, a każdy 
produkt może występować w wielu zamówieniach. 
 
Trzecia tabela — w tym przykładzie, Szczegóły zamówień, — zawiera klucze 
podstawowe z tabel Zamówienia i Produkty. Tabela Szczegóły zamówień jest 
tabelą skrzyżowań obu tych tabel. 
 
Ponieważ każdy element tabeli Zamówienia i każdy element tabeli Produkty może 
być wyświetlany wiele razy w tabeli Szczegóły zamówień, między obiema tymi 
tabelami a tabelą Szczegóły zamówienia istnieje relacja typu jeden-do-wielu. 
Wszystkie tabele skrzyżowań łączą tabele, które są powiązane relacjami typu 
jeden-do-wielu z tabelami skrzyżowań, a klucze podstawowe tych połączonych 
tabel są kluczami obcymi w tabeli skrzyżowań. 
 
Gdy jedna tabela może być połączona relacją z wieloma innymi tabelami poprzez 
zwykłe odnoszenie się do informacji w nich zawartych, niektóre części bazy 
danych są jak komórki organizmu ludzkiego. Każda jest aktywna, każda ma 
prawidłowy rozmiar w zakresie swojego zastosowania i razem mogą uzyskiwać 
wyniki znacznie wykraczające poza ich indywidualne możliwości. 
 
15. Co to są postacie normalne? Jakich zależności dotyczą ? 
 
Postac normalna - postać relacji w bazie danych, w której nie występuje 
redundancja (nadmiarowość), czyli powtarzanie się tych samych informacji. 
Doprowadzeniu relacji do postaci normalnej służy normalizacja bazy danych. 
1NF : 
Relacja jest w pierwszej postaci normalnej, jeśli: 
opisuje jeden obiekt, 
wartości atrybutów są elementarne (atomowe, niepodzielne) - każda kolumna 
jest wartością skalarną (atomową), a nie macierzą lub listą czy też 
czymkolwiek, co posiada własną strukturę, 
nie zawiera kolekcji (powtarzających się grup informacji), 
posiada klucz główny, 
kolejność wierszy może być dowolna (znaczenie danych nie zależy od kolejności 
wierszy). 
Właściwości, które muszą zaistnieć w 1 formie : 
Jest zdefiniowany klucz relacji. 
Wszystkie atrybuty niekluczowe są w zależności funkcyjnej od klucza. 
2NF : 

background image

n224 ;)  

 

 

Relacja jest w drugiej postaci normalnej wtedy i tylko wtedy, gdy jest w I 
postaci normalnej i każda kolumna zależy funkcyjnie od całego klucza głównego 
(a nie np. od części klucza). 
3NF : 
Mamy z nią do czynienia wtedy i tylko wtedy, gdy tabela jest w 2NF oraz gdy 
wszystkie pola niebędące polami klucza głównego są od niego zależne 
bezpośrednio. 
BCNF : 
W tej postaci zależności funkcyjne muszą mieć następującą postać: jeżeli X → 
A i atrybut A nie jest zawarty w X, to X jest kluczem lub zawiera klucz. 
4NF : 
Relacja jest w czwartej postaci normalnej, jeżeli zawsze wtedy, kiedy zbiór 
atrybutów X określa wartościowo Y, to zachodzi jeden z następujących 
warunków: 
Y jest puste lub zawiera się w X, 
suma zbiorów X i Y jest pełnym zbiorem atrybutów, 
X zawiera klucz. 
Czwarta i piąta postać normalna są w zasadzie używane wyłącznie przy okazji 
rozważań teoretycznych. 
 
16. Co to są widoki? Do czego służą ? 
„Ufizycznienie” kwerendy, // nie chce mi sie tego ropisywac 
 
17. Co to są transakcje ? Jakie reguły powinny być spełnione przy korzystaniu 
z transakcji? 
 
Transakcja - zbiór operacji na bazie danych, które stanowią w istocie pewną 
całość i jako takie powinny być wykonane wszystkie lub żadna z nich. Warunki 
jakie powinny spełniać transakcje bardziej szczegółowo opisują zasady ACID 
(Atomicity, Consistency, Isolation, Durability - Atomowość, Spójność, 
Izolacja, Trwałość). 
 
Atomowość (niepodzielność) - każda transakcja jest niepodzielną operacją z 
punktu widzenia użytkownika: albo wszystkie akcje wchodzące w skład 
transakcji są wykonywane albo żadna z nich. 
 
Spójność - po wykonaniu zbioru transakcji stan bazy danych powinien być 
spójny (pod warunkiem, że przy rozpoczynaniu transakcji stan bazy danych był 
spójny oraz że każda z wykonywanych transakcji jest z osobna poprawna). 
 
Izolacja - transakcje powinny sobie wzajemnie nie  przeszkadzać w działaniu. 
Każdy użytkownik powinien mieć iluzję, że sam korzysta z bazy danych. Przy 
najwyższym (zalecanym) stopniu izolacji wymaga się aby transakcja działała na 
spójnym, nie zmienianym przez innych użytkowników fragmencie bazy danych. 
 
Trwałość - dane zatwierdzone przez transakcję powinny być dostępne nawet w 
sytuacji awarii programu, komputera lub nośnika danych. 
 
18.Co to jest poziom izolacji transakcji ? Jakie znasz poziomy ? Jakie 
poziomy zaimplementowano w PostrgeSQL-u ? 
 
Poziom izolacji transakcji (transaction isolation levels) to stopień 
uniezależnienia się transakcji od siebie nawzajem. Im wyższy poziom izolacji 
tym większa pewność, że podczas wykonywania jednej transakcji zmiany 
dokonywane w tym samym czasie przez inne transakcje nie wpłyną na nią. 
 
Obecnie można mówić o czterech poziomach izolacji: 

background image

n224 ;)  

 

 

- Odczyt niezatwierdzych (Read uncommited) 
- Odczyt zatwierdzonych (Read commited) 
- Odczyt powtarzalny (Repeatable read) 
- Szeregowalność (Serializable) 
 
Implementacja :  
 
SET TRANSACTION ISOLATION LEVEL 
    { READ UNCOMMITTED 
    | READ COMMITTED 
    | REPEATABLE READ 
    | SNAPSHOT 
    | SERIALIZABLE 
    } 
 
 
19. Omówić wybrany poziom izolacji transakcji (odczyt zatw. / odczyt niezatw. 
/ powtarzalny odczyt/ szeregowalne ). 
 
Read uncommited 
Zasadniczo jest to po prostu brak izolacji. Wszelkie zmiany, w tym także te 
jeszcze niezatwierdzone (!) są widzialne przez inne transakcje. Czyli 
transakcja odczytująca dane może odczytać dane błędne. 
 
Read commited 
Podstawowa izolacja, w której transakcja zawsze widzi tylko dane 
zatwierdzone. W dalszym ciągu jednak nie jest to sytuacja zbyt komfortowa, 
ponieważ długa transakcja będzie odczytywać dane zmieniane w czasie jej 
trwania przez inne transakcje. W szczególnym przypadku transakcja odczytując 
dwa razy te same dane może otrzymać inne wyniki (jeśli w międzyczasie inna 
transakcja zatwierdzi zmiany w tych danych). 
 
Repeatable read 
Przy tym poziomie izolacji transakcja w dalszym ciągu widzi zmiany 
zatwierdzane już po jej rozpoczęciu przez inne transakcje, ale ma zapewnioną 
powtarzalność odczytów, czyli nie dojdzie do sytuacji, w której czytając te 
same dane kilka razy otrzyma inne wyniki. Czyli przy tym poziomie izolacji 
transakcja ma wrażenie, że dane w bazie się nie zmieniają - ma dostęp tylko 
do ich jednej wersji. W dalszym ciągu jednak pozostaje problem tego, że w 
zależności od różnych czynników wpływających na szybkość wykonywania tej i 
innych transakcji, nie można przewidzieć, jakie dane transakcja odczyta. Co 
tutaj najistotniejsze: z punktu widzenia tej transakcji inne transakcje mogą 
się wydawać NIESPÓJNE, NIEPEŁNE.  
Na przykładzie: mamy transakcję raportową, która czyta dane zagregowane z 
dużej tabeli. W czasie generowania raportu inne krótkie transakcje modyfikują 
dane w tej tabeli w ten sposób, że każda modyfikuje dwa rekordy (np. dwa 
konta księgowe). Transakcja raportowa zaś podczas generowania raportu 
zapamiętuje wartości rekordów, które odczytuje. Może się więc zdarzyć, że 
przy odczycie kolejnego rekordu uwzględni zmianę w nim, ale nie uwzględni 
zmiany w drugim rekordzie (wcześniejszym - odczytała go wcześniej i zmian w 
nim już nie rejestruje). Na przykładzie kont księgowych: transakcja raportowa 
zauważy zmianę tylko jednego konta (i np. stwierdzi dodatnie saldo na wyższym 
poziomie syntetyki zamiast zerowego). 
 
Serializable 
W tym poziomie izolacji mamy rozwiązany problem pozornej niespójności innych 
zatwierdzanych transakcji. Transakcja raportowa widzi stan bazy z momentu 

background image

n224 ;)  

 

10 

 

swojego rozpoczęcia, a wszelkie zmiany dokonywane przez inne transakcje po 
tym momencie są niewidzialne. Czyli transakcja dostaje do swojej dyspozycji 
zamrożony obraz bazy danych z dokładnego punktu w czasie - z momentu swojego 
rozpoczęcia. Skąd nazwa "szeregowalne"? Ano właśnie stąd, że przy tym 
poziomie izolacji liczą się tylko momenty rozpoczynania transakcji. Można je 
więc szeregować wg. czasu rozpoczęcia. Taki szereg transakcji zawsze 
zaowocuje takim samym stanem bazy po ich zakończeniu, niezależnie od tego, 
jak szybko się one wykonywały i które wcześniej się zakończyły (zatwierdziły 
swoje dane). Nie ma znaczenia, w jakiej kolejności transakcje zatwierdzają 
dane. Przy tym poziomie izolacji trzeba pamiętać o konfliktach. Przy tym 
poziomie izloacji bowiem konflikty między transakcjami odwołującymi się do 
tych samych danych są najbardziej prawdopodobne. Warto jednak pomyśleć o tym, 
że w wielu wypadkach dla prostych transakcji modyfikujących wystarczy poziom 
izolacji Read Commited, natomiast tylko wrażliwe na niespójności transakcje 
złożone, które odczytują dane, np. raportowe (uwaga: należy uważnie 
przeanalizować także proste transakcje odczytująco-modyfikujące) wymagają 
przełączenia do poziomu Serializable. 
Ten poziom izolacji nastręcza bazom danych sporo kłopotu. Sposoby realizacji 
są dwa: poprzez odwoływanie się do danych historycznych lub przez złożone 
blokady. 
Metoda zakładania złożonych blokad ma bardzo krótkie nogi, ponieważ nie 
gwarantuje sukcesu - po prostu przy tym poziomie izolacji pewnych rzeczy nie 
można już wykonać post factum - dane zostały zatwierdzone później, trafiły do 
bazy i koniec. Stąd przy dużym obciążeniu drobnymi transakcjami 
modyfikującymi wykonanie złożonego raportu korzystającego z bieżących danych 
przy poziomie Serializable jest praktycznie niemożliwe. 
Metoda odtwarzania danych historycznych daje gwarancję sukcesu. Dane 
historyczne mogą być otrzymywane np. przez odwoływanie się do logów 
transakcyjnych lub poprzez tworzenie kopii modyfikowanych rekordów (tę drugą 
strategię stosuje np. baza danych PostgreSQL i jest to strategia 
najpewniejsza, ale też kosztowna). Przy korzystaniu z logu transakcyjnego 
potknąć się można przy zbyt małej wielkości tego logu (czyli wtedy, gdy np. 
transakcja raportowa trwa bardzo długo i musi sięgać głęboko wstecz, a w tym 
czasie log szybko przyrasta na skutek intensywnych operacji modyfikujących 
dane) - nie dotyczy to bazy PostgreSQL. 
 
20. W jaki sposób można dokonywać blokad w bazach danych i po co się stosuje 
blokady ? 
 
Blokady stanowią mechanizm strzegący integralności danych w sytuacji 
wielodostępu, poprzez 
zapewnienie określonemu klientowi wyłączności dostępu do modyfikowanych przez 
niego danych, gdy jest 
to niezbędne aby zapobiec błędom które mogłyby wyniknąć z ,,przemieszania'' 
modyfikacji danych 
wykonywanych przez różnych klientów. Blokady stosowane są zarówno do struktur 
danych widocznych dla 
użytkownika (tabele, wiersze), jak i do wewnętrznych struktur danych systemu. 
System Oracle stosuje blokady automatycznie, w sposób niewidoczny dla 
użytkownika, w ramach obsługi 
transakcji. W szczególnych przypadkach może być potrzebne (i jest możliwe) 
jawne deklarowanie blokad 
lub zmiana przez użytkownika blokad stosowanych implicite, sytuacje takie są 
jednak wyjątkiem. Przykłady 
takich sytuacji: pewna transakcja wykonuje jedynie odczyt danych z pewnych 
tabel (instrukcjami SELECT) -- 

background image

n224 ;)  

 

11 

 

co nie wiąże się automatycznie z blokadą dostępu, lecz musi mieć 
zagwarantowaną niezmienność tych 
tabel w ramach transakcji; pewna transakcja musi mieć zagwarantowany wyłączny 
dostęp do potrzebnych 
jej danych, ponieważ nie może z jakichś względów czekać na zwolnienie blokad 
które mogą być nałożone 
na te dane przez innych klientów. Do takich celów istnieje m. in. instrukcja 
LOCK TABLE. 
Przykładowo, instrukcja 
LOCK TABLE tabela IN SHARE MODE 
uniemożliwia innym, jednocześnie wykonywanym transakcjom dokonywanie 
modyfikacji danych w podanej 
tabeli, oraz nakładanie blokad wyłącznych (p. poniżej). Pozwala natomiast na 
nałożenie analogicznych 
blokad (SHARE MODE) przez inne transakcje -- wówczas żadna z transakcji nie 
będzie mogła dokonać 
modyfikacji danych. 
Z kolei 
LOCK TABLE tabela IN EXCLUSIVE MODE 
dopuszcza inne transakcje jedynie do odczytu danych z zablokowanej tabeli, 
uniemożliwiając im 
jakiekolwiek inne operacje (łącznie z nakładaniem własnych blokad). 
 
21. Zasady tworzenia interfejsu użytkownika w bazach danych. 
 
Istnieje kilka głównych wytycznych, którymi powinieneś się kierować w trakcie 
projektowania interfejsu: 
➔ Używaj programowania obiektowego z zachowaniem wszelkich jego zasad i 
przesłanek. 
➔ Czyń interfejs niezależnym i wyspecjalizowanym. 
➔ Oprzyj interfejs na standardowej budowie. 
 
22. Podstawowe metody dostępu do danych z poziomu aplikacji .