01 BD, politechnika infa 2 st, Projektowanie Systemów Informatycznych


Bazy Danych i Ochrona Danych

1. Typy powiązań pomiędzy danymi

0x08 graphic

  1. Powiązania proste:

Powiązanie "1-1". Dana elementarna A determinuje daną elementarną B tzn. w dowolnej chwili każda wartość A ma 1 i tylko 1 związaną z nią wartość B. (Powiązanie proste)

0x08 graphic

  1. Powiązania złożone:

Powiązanie typu "1-wiele" - jednej wartości A odpowiada 0,1 lub wiele wartości B. (Powiązanie złożone)

0x01 graphic
Każdy mężczyzna ma 1 kobietę a każda kobieta 1 mężczyznę.

0x01 graphic
Każdy mężczyzna ma wiele kobiet.

0x01 graphic
Każda kobieta ma wielu mężczyzn.

0x01 graphic
Wiele mężczyzn ma wiele kobiet i wiele kobiet ma wielu mężczyzn.

0x08 graphic

  1. Powiązania warunkowe ( c warunek)

np.: c = pod warunkiem, że jest żonaty, mężatką.

Powiązanie warunkowe od A do B (c). Wartości A odpowiada jedna lub kilka związanych z nią B , pod jakimś warunkiem.

  1. Powiązania wielokrotne: (dwa typy danych mogą być powiązane ze sobą na wiele sposobów).

0x01 graphic

Powiązania wielokrotne - pomiędzy danymi zachodzi więcej niż jedno powiązanie. W takim przypadku należy je etykietować, np.:

0x01 graphic

Powiązanie - odwzorowanie (połączenie) pomiędzy danymi elementami ( lub rekordami ) dostarczające informacji dotyczącej związków między danymi elementarnymi, nie występujące w sposób bezpośredni.

Odwzorowania proste - pomiędzy danymi elementarnymi istnieje tylko 1 połączenie - A identyfikuje B.

Odwzorowanie złożone - pomiędzy danymi elementarnymi istnieje wiele połączeń - A nie identyfikuje B. Zachodzi odwzorowanie w 2 kierunkach więc mamy 4 powiązania: 1:1, 1:n, n:1, n:n.

Dana elementarna - dana niosąca najbardziej elementarną porcję informacji, która nie da się podzielić na mniejsze dane. Można je grupować w rekordy.

2. Niezależność danych w bazach danych.

Podstawowym celem baz danych jest zapewnienie niezależności danych, czyli: odporność programów użytkowych na zmiany struktury pamięci i strategii dostępu. Rozróżniamy 2 typy niezależności danych:

  1. Fizyczna niezależność danych polega na tym, że rozszerzenie systemu komputerowego, na którym pracuje SZBD o nowy sprzęt nie narusza danych w bazie

  2. Logiczna niezależność danych polega na tym, że - po pierwsze wprowadzanie nowych danych do bazy nie dezaktualizuje starych, po drugie - dane, które nie są wzajemnie powiązane tzw. związkami integralnościowymi mogą być usuwane z bazy niezależnie od siebie.

Statyczna i dynamiczna niezależność danych: o wiązaniu dynamicznym mówimy, gdy wiązanie występuje w momencie wyszukiwania danych. Schemat lub fizyczna organizacja może być wtedy modyfikowana w dowolnym momencie - daje ono dynamiczną niezależność danych. Statyczna niezależność danych wymaga, aby przeprowadzenie zmian w schemacie ogólnym, podschemacie lub fizycznej reprezentacji, zakończyło się zanim dowolny program użytkowy używający tych danych zostanie wykonany.

Rodzaje danych:

  1. Dane zagregowane - treść danej mającej nazwę definiuje się tylko raz . Każdy programista odwołujący się do określonej danej musi zakładać tę samą treść tej danej.

  2. Dane elementarne - definiuje się tylko raz. Programista odwołujący się do tych danych musi zakładać tę samą ich treść. Z tego samego zbioru danych elementarnych mogą być utworzone różne rekordy lub segmenty.

  3. Dane subelementarne - treści tych danych, mających nazwę, mogą być różne w różnych programach użytkowych. I tak np. jeden program może odwoływać się do siedmiocyfrowych, a inny do ośmiocyfrowych danych elementarnych (patrz przykład wyżej).

3. Rola administratora danych.

  1. Tworzenie pierwotnego opisu struktury bazy danych i sposobu odwzorowania go w plikach fizycznej bazie danych.

  2. Udzielanie rozmaitym użytkownikom zezwoleń na korzystanie z bazy danych lub jej fragmentów.

  3. Modyfikacja opisu bazy danych lub jego związków z fizyczną organizacją bazy danych, gdy wnioski z jej eksploatacji wskazują że inna organizacja byłaby bardziej efektowna.

  4. Wykonywanie archiwalnych kopii bazy danych i przywracanie jej poprzedniego stanu po uszkodzeniach powstałych na skutek awarii lub niewłaściwego użycia sprzętu bądź oprogramowania.

4. Rola redundancji w bazach danych.

Rudundacja w bazach danych to powielanie się danych.

Wady:

Zalety:

  1. Zagadnienie integralności danych.

Formalna poprawność bazy danych ich fizycznej organizacji, zgodności ze schematem bazy danych i regułami dostępu.

Relacyjny model logiczny posiada wiele zalet. Oto niektóre z nich:

Wielopoziomowa integralność danych. Integralność na poziomie pól zapewnia dokładność wprowadzanych danych, integralność na poziomie tabel uniemożliwia powtarzanie się tego samego rekordu i pozostawianie nie wypełnionych pól wchodzących w skład klucza podstawowego, integralność na poziomie relacji gwarantuje ich odpowiednie zdefiniowanie, a reguły integralności kontrolują poprawność danych z punktu widzenia tematu bazy.

Model relacyjny dostarcza dodatkowych, specyficznych dla siebie postaci reguł integralności:

W praktyce zazwyczaj jest pożądane stosowanie dalszych warunków integralności (integralność dodatkowa). Na ogół istnieją w DBMS mechanizmy narzucenia takich warunków, sformułowanych w języku algebry relacyjnej lub zbliżonym.

6. Systemy OLTP i MIS.

System OLTP (online transaction processing) pracuje w czasie rzeczywistym, zbierając i przetwarzając dane związane z transakcjami oraz dokonując zmian we wspólnych bazach danych oraz w innych plikach. Podczas przetwarzania transakcyjnego w czasie rzeczywistym transakcje wykonywane są natychmiastowo, w przeciwieństwie do przetwarzania wsadowego, podczas którego partia transakcji jest przechowywana przez pewien czas i wykonywana później. Większość procesów wsadowych, związanych np. z prowadzeniem księgowości, jest realizowana w godzinach wieczornych. Rezultaty pracy systemu OLTP są natychmiast udostępniane bazie danych - przy założeniu, że transakcje zostały zrealizowane pomyślnie. Najczęściej spotykane przykłady systemów OLTP to systemy rezerwacji biletów lotniczych oraz rozliczeń bankowych.

System informowania kierownictwa (MIS)

Oparty na technice komputerowej system gromadzenia i przetwarzania informacji używany przez menedżerów i ich najbliższy personel w bezpośrednim wspieraniu działań kierowniczych i podejmowaniu decyzji. System taki powinien być sprawny w przetwarzaniu informacji i zawierać dane potrzebne konkretnemu użytkownikowi. Powinny go cechować:

7. Zasady projektowania baz danych.

W projektowaniu baz danych należy szczególną uwagę zwrócić na takie ich zorganizowanie, by mogły mieć jak największe zastosowanie oraz by sposób wykorzystania mógł być zmieniony łatwo i szybko.

8. Zależności wykorzystywane w modelu relacyjnym.

  1. Zależność funkcyjna (funkcjonalna) - Atrybut B jest funkcjonalnie zależny od atrybutu A wtedy i tylko wtedy kiedy każdej wartości atrybutu A odpowiada dokładnie 1 wartość atrybutu B

  2. Pełna zależność funkcjonalna - Atrybut B jest w pełni funkcjonalnie zależny od atrybutu A wtedy i tylko wtedy jeżeli jest funkcjonalnie zależny od niego i nie jest funkcjonalnie zależny od żadnego innego jego podzbioru.

  3. Przechodnia zależność funkcjonalna - Atrybut C jest przechodnio funkcjonalnie zależny od atrybutu A wtedy i tylko wtedy gdy jest funkcjonalnie zależny od atrybutu B i B jest funkcjonalnie zależny od atrybutu A.

  4. Wielowartościowa zależność funkcjonalna - Atrybut B jest wielowartościowo funkcjonalnie zależny od atrybutu A wtedy i tylko wtedy, gdy każdej wartości atrybutu A odpowiada ściśle określony zbiór wartości atrybutu B.

  5. Połączeniowa zależność funkcjonalna - Mówimy że w schemacie relacji R=(A1…An) występuje połączeniowa zależność funkcjonalna wtedy i tylko wtedy, gdy możliwa jest dekompozycja relacji r (w schemacie R) na relacji r1...rn taka, że relację pierwotną i można zredukować przez wykonanie sekwencji operacji połączeń relacji r.

9. Normalizacja w modelu relacyjnym.

Postać nieznormalizowana - tabela ZAMÓWIENIA

Zamowienie

ID

ND

AD

IE

NE

Szt

IM

AM

1

3

FSO

Wa

53 57 59

Gaźnik Wał Błotnik

100 50 500

5 5 6

Ch Ch Mo

2

4

FSM

Ty

54 32

Gaźnik Koło

500 100

7 6

Ba Mo

3

5

FSR

88

Silnik

15

7

Ba

4

6

FSM

BB

59 21

Błotnik Pradn

400 50

6 7

Mo Ba

5

3

FSO

Wa

53 57

Gaźnik Wał

200 30

5 5

Ch Ch

6

3

FSO

Wa

59

Błotnik

20

6

Mo

Przedstawiona tabela o 6 krotkach nie jest relacją, ponieważ istnieją w niej krotki, w których pewnemu atrybutowi odpowiadają zbiory 2 lub 3 wartości. Uzupełniając tabelę i powiększając liczbę krotek do 11 otrzymujemy tabelę l, stanowiącą relację w I postaci normalnej.

I POSTAĆ NORMALNA

Zamowienie

ID

ND

AD

IE

NE

Szt

IM

AM

1

3

FSO

Wa

53

Gaźnik

100

5

Ch

1

3

FSO

Wa

57

Wał

50

5

Ch

1

3

FSO

Wa

59

Błotnik

500

6

Mo

2

4

FSM

Ty

54

Gaźnik

500

7

Ba

2

4

FSM

ty

32

Koło

100

6

Mo

3

5

FSR

88

Silnik

15

7

Ba

4

6

FSM

BB

59

Błotnik

400

6

Mo

4

6

FSM

BB

21

Pradn

50

7

Ba

5

3

FSO

Wa

53

Gaźnik

200

5

Ch

5

3

FSO

Wa

57

Wał

30

5

Ch

6

3

FSO

Wa

59

Błotnik

20

6

Mo

II POSTAĆ NORMALNA

Relacja jest w drugiej postaci normalnej jeżeli dla każdej zależności X Y, w kórej Y nie zawiera się w X , zbiór X zawiera klucz (tzn. X jest nadkluczem). Relacja w drugiej postaci normalnej nie zawiera redundancji i anomalii.

0x01 graphic

Aby doprowadzić relację do II postaci normalnej można przeprowadzić operację rozkładu schematu relacji.

Najpierw wydzielamy 2 relacje, jednocześnie usuwamy występujące w nich powtórzenia krotek (wierszy):

Zamówienia_dostawcy

Zamowienie

ID

ND

AD

1

3

FSO

Wa

2

4

FSM

Ty

3

5

FSR

4

6

FSM

BB

5

3

FSO

Wa

6

3

FSO

Wa

Elementy_w_magazynie

IE

NE

IM

AM

53

Gaźnik

5

Ch

57

Wał

5

Ch

59

Błotnik

6

Mo

54

Gaźnik

7

Ba

32

Koło

6

Mo

88

Silnik

7

Ba

21

Pradn

7

Ba

Pozostaje jeszcze relacja która jest jednocześnie w II i w III postaci normalnej:

Zamówienia_elementy:

Zamowienie

IE

Szt

1

53

100

1

57

50

1

59

500

2

54

500

2

32

100

3

88

15

4

59

400

4

21

50

5

53

200

5

57

30

6

59

20

Przy podziale nie można dopuścić do utraty informacji. Z tego powodu po podziale relacji 1 o 9 atrybutach otrzymujemy 3 relacje o 11 atrybutach.

III POSTAĆ NORMALNA

Dana jest w III postaci normalnej, jeżeli jest ona w II postaci normalnej i każdy jej atrybut nie wchodzący w skład żadnego klucza potencjalnego nie jest przechodnio funkcjonalnie zależny od żadnego klucza potencjalnego tej relacji. Aby doprowadzić relację której atrybuty pozostają w przechodniej zależności funkcjonalnej, należy podzielić ją na relacje zawierające tylko zależność funkcjonalną.

0x01 graphic

W relacji 2 występuje dublowanie danych, z powodu przechodniej zależności funkcyjnej. Należy ją podzielić na 2 relacje w III postaci normalnej. Przechodnia zależność funkcyjna występuje w relacji, jeśli między atrybutami niekluczowymi występuje zależność funkcyjna.

Zamówienia_elementy:

Zamowienie

IE

Szt

1

53

100

1

57

50

1

59

500

2

54

500

2

32

100

3

88

15

4

59

400

4

21

50

5

53

200

5

57

30

6

59

20

Zamówienia_do_dostawcy:

Zamowienie

ID

1

3

2

4

3

5

4

6

5

3

6

3

Dostawcy:

ID

ND

AD

3

FSO

Wa

4

FSM

Ty

5

FSR

6

FSM

BB

3

FSO

Wa

Elementy:

IE

NE

IM

53

Gaźnik

5

57

Wał

5

59

Błotnik

6

54

Gaźnik

7

32

Koło

6

88

Silnik

7

21

Pradn

7

Magazyny:

IM

AM

5

Ch

6

Mo

7

Ba

Podobnie w relacji 3 występuje dublowanie danych, z powodu przechodniej zależności funkcyjnej. Należy ją podzielić na 2 relacje w III postaci normalnej usuwając powtórzenia i porządkując.

REZULTAT procedury normalizacyjnej: zamiast l relacji ZAMÓWIENIA w I postaci normalnej mamy 5 relacji w III postaci normalnej:

IV POSTAĆ NORMALNA

Czwartą postać normalną stosuje się do relacji z zależnościami wielowartościowymi.

Dana jest relacja o schemacie R oraz trzy parami rozłączne i niepuste podzbiory X, Y, Z atrybutów z R takie że X, Y, Z =R i podzbiór Y jest nietrywialnie wielowartościowo zależny od X. Dana relacja jest w IV postaci normalnej gdy jest w III postaci normalnej i wielowartościowa zależność zbioru Y od X pociąga za sobą funkcjonalną zależność wszystkich atrybutów tej relacji od X.

Jak wynika z definicji relacja, która zawiera trywialną wielowartościową zależność funkcjonalną jest w IV postaci normalnej. Stąd wniosek że relację zawierającą nie trywialną wielowartościową zależność funkcjonalną należy podzielić na takie relacje, które będą zawierać tylko zależności trywialne.

0x01 graphic

Studenci:

Nazwisko_Studenta

J_programowania

J_obcy

Kowalski Jan

C++

j. angielki

Kowalski Jan

Delphi

j. angielki

Kowalski Jan

SQL

j. angielki

Kowalski Jan

C++

j. niemiecki

Kowalski Jan

Delphi

j. niemiecki

Kowalski Jan

SQL

j. niemiecki

Kowalski Jan

C++

j. rosyjski

Kowalski Jan

Delphi

j. rosyjski

Nowak Piotr

SQL

j. rosyjski

Nowak Piotr

Pascal

j. angielki

Nowak Piotr

C++

j. angielki

Nowak Piotr

Pascal

j. hiszpański

Nowak Piotr

C++

j. hiszpański

Nowak Piotr

Pascal

j. rosyjski

Nowak Piotr

C++

j. rosyjski

Dokonujemy rozbicia na 2 tabele (relacje):

Nazwisko_Studenta

J_programowania

Kowalski Jan

C++

Kowalski Jan

Delphi

Kowalski Jan

SQL

Nowak Piotr

Pascal

Nowak Piotr

C++

Nazwisko_Studenta

J_obcy

Kowalski Jan

j. angielki

Kowalski Jan

j. niemiecki

Kowalski Jan

j. rosyjski

Nowak Piotr

j. angielki

Nowak Piotr

j. hiszpański

Nowak Piotr

j. rosyjski

V POSTAĆ NORMALNA

Dana relacja r o schemacie R jest w V postaci normalnej wtedy i tylko wtedy, gdy jest w IV postaci normalnej i w przypadku występowania w niej połączeniowej zależności funkcjonalnej *R [R1,…,Rn] zależność ta wynika z zależności atrybutów od klucza.

Wynika z tego, że w celu doprowadzenia pewnej relacji do V postaci normalnej konieczne jest podzielenie jej na takie relacje, które spełniać będą pierwszy warunek.

0x01 graphic

10. Problem niejednoznaczności danych w modelu relacyjnym.

Problem ten pojawia się w specyfikacji wymagań gdy stosujemy język naturalny. Jest to jedna z metod specyfikacji wymagań. Jest ona najczęściej stosowana. Jej wada to niejednoznaczność powodująca różne rozumienie tego samego tekstu. Utrudnia to wykrycie powiązanych wymagań i powoduje trudności w wykryciu sprzeczności

Wszystkie specyficzne terminy powinny być umieszczone w słowniku, wraz z wyjaśnieniem. Słownik powinien precyzować terminy niejednoznaczne i określać ich znaczenie w kontekście tego dokument (być może nieco węższe).

Formalna specyfikacja oznacza bardzo dokładne zdekomponowanie wymagań (najlepiej w pewnym formularzu) na krótkie punkty, których interpretacja nie powinna nastręczać trudności lub prowadzić do niejednoznaczności. Formalna specyfikacja powinna stanowić podstawę dla fazy testowania.

Problemy z językiem naturalnym ( stosowanym do opisu wymagań systemowych w relacyjnych bazach danych ):

Do czytelnika należy stwierdzenie, czy dwa wymagania są takie same, czy też się od siebie różnią. Nie ma łatwego podziału wymagań w języku naturalnym na moduły. Znalezienie wszystkich powiązanych wymagań może być trudne.

Niejednoznaczności charakterystycznych dla języka naturalnego można uniknąć przez opisywanie wymagań operacyjnie za pomocą języka opisu programów (Program Description Language, PDL).

Proponuje się używać PDL w dwóch następujących sytuacjach:

Wymagania systemowe służą do poinformowania w precyzyjny sposób o funkcjach, które system ma spełniać. Aby uniknąć niejednoznaczności, można je zapisać jakiegoś języka strukturalnego. Może to być strukturalna postać języka naturalnego, język oparty na języku oprogramowania wysokiego poziomu lub specjalny język do specyfikowania wymagań.

11. Charakterystyka języka SQL.

SQL (ang. Structured Query Language) to strukturalny język zapytań używany do tworzenia, modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych.

Jest to język programowania opracowany w latach siedemdziesiątych w firmie IBM. Stał się on standardem w komunikacji z serwerami relacyjnych baz danych. Wiele współczesnych systemów relacyjnych baz danych używa do komunikacji z użytkownikiem SQL, dlatego mówi się, że korzystanie z relacyjnych baz danych, to korzystanie z SQL-a. Pierwszą firmą, która włączyła SQL do swojego produktu komercyjnego, był Oracle. Dalsze wprowadzanie SQL-a, w produktach innych firm, wiązało się nierozłącznie z wprowadzaniem modyfikacji pierwotnego języka. Wkrótce utrzymanie dalszej jednolitości języka wymagało wprowadzenia standardu.

Z technicznego punktu widzenia, SQL jest podjęzykiem danych. Oznacza to, że jest on wykorzystywany wyłącznie do komunikacji z bazą danych. Nie posiada on cech pozwalających na tworzenie kompletnych programów. Jego wykorzystanie może być trojakie i z tego względu wyróżnia się trzy formy SQL-a:

  1. SQL interakcyjny lub autonomiczny wykorzystywany jest przez użytkowników w celu bezpośredniego pobierania lub wprowadzania informacji do bazy. Przykładem może być zapytanie prowadzące do uzyskania zestawienia aktywności kont w miesiącu. Wynik jest wówczas przekazywany na ekran, z ewentualną opcją jego przekierowania do pliku lub drukarki.

  2. Statyczny kod SQL (Static SQL) nie ulega zmianom i pisany jest wraz z całą aplikacją, podczas której pracy jest wykorzystywany. Nie ulega zmianom w sensie zachowania niezmiennej treści instrukcji, które jednak zawierać mogą odwołania do zmiennych lub parametrów przekazujących wartości z lub do aplikacji. Statyczny SQL występuja w dwóch odmianach.

  • Dynamiczny kod SQL (Dynamic SQL) generowany jest w trakcie pracy aplikacji. Wykorzystuje się go w miejsce podejścia statycznego, jeżeli w chwili pisania aplikacji nie jest możliwe określenie treści potrzebnych zapytań - powstaje ona w oparciu o decyzje użytkownika. Tę formę SQL generują przede wszystkim takie narzędzia jak graficzne języki zapytań. Utworzenie odpowiedniego zapytania jest tu odpowiedzią na działania użytkownika.

  • Wymagania tych trzech form różnią się i znajduje to odbicie w wykorzystywanych przez nie konstrukcjach językowych. Zarówno statyczny, jak i dynamiczny SQL uzupełniają formę autonomiczną cechami odpowiednimi tylko w określonych sytuacjach. Większość języka pozostaje jednak dla wszystkich form identyczna.

    Składnia SQL

    Użycie SQL, zgodnie z jego nazwą, polega na zadawaniu zapytań do bazy danych. Zapytania można zaliczyć do jednego z dwóch głównych podzbiorów:

    Instrukcje SQL w obrębie zapytań tradycyjnie zapisywane są wielkimi literami, jednak nie jest to wymóg. Każde zapytanie w SQL-u musi kończyć się znakiem ";" (średnik).

    Dodatkowo, niektóre interpretery SQL (np. psql w przypadku PostgreSQL), używają swoich własnych instrukcji, z poza standardu SQL, które służą np. do połączenia się z bazą, wyświetlenia dokumentacji, itp.

    DML

    DML służy do operacji na danych - do ich umieszczania w bazie, kasowania, przeglądania, zmiany. Najważniejsze polecenia z tego zbioru to:

    Dane tekstowe podawane muszą być zawsze w formie ograniczonej znakami pojedynczego cudzysłowu (').

    DDL

    Dzięki DDL natomiast, można operować na strukturach, w których te dane są przechowywane - czyli np. dodawać, zmieniać i kasować tabele lub bazy. Najważniejsze polecenia tej grupy to:

    Przykładowe zapytania

    Przykładowe użycie wyżej wymienionych rodzajów zapytań.

    SELECT * FROM pracownicy WHERE pensja > 2000 ORDER BY staz DESC;

    Wyświeta z tabeli pracownicy (FROM pracownicy) wszystkie kolumny (*) dotyczące tych pracowników, których pensja jest większa niż 2000 (WHERE pensja > 2000) i sortuje wynik malejąco według stażu pracy (ORDER BY staz DESC).

    INSERT INTO pracownicy (imie, nazwisko, pensja, staz) VALUES ('Jan', 'Kowalski', 5500, 1);

    Dodaje do tabeli pracownicy (INTO pracownicy) wiersz (rekord) zawierający dane pojedynczego pracownika.

    UPDATE pracownicy SET pensja = pensja * 1.1 WHERE staz > 2;

    Podnosi o 10% (SET pensja = pensja * 1.1) pensję pracownikom, których staż jest większy niż 2 (np. lata).

    DELETE FROM pracownicy WHERE imie = 'Jan' AND nazwisko = 'Kowalski';

    Usuwa z tabeli "pracownicy" wiersz (rekord) dotyczący pracownika o imieniu "Jan" i nazwisku "Kowalski".

    CREATE TABLE pracownicy (imie varchar(255), nazwisko varchar(255), pensja float, staz int);

    Tworzy tabelę "pracownicy" zawierającą tekstowe (varchar - zmiennej długości pole tekstowe) pola "imię" i "nazwisko", o maksymalnej długości 255 znaków, zapisaną za pomocą liczby rzeczywistej (float od ang. floating point) pensję oraz zapisany za pomocą liczby całkowitej (int od ang. integer) staż.

    DROP TABLE pracownicy;

    Usuwa z bazy całkowicie tabelę "pracownicy".

    ALTER TABLE pracownicy ADD COLUMN dzial varchar(255);

    Dodaje do struktury tabeli "pracownicy" kolumnę "dzial" (dział), jako pole tekstowe o długości max. 255 znaków.

    12. Tożsamość obiektów w modelu obiektowym.

    Obiekt to pewien byt, encja charakteryzowana przez swój stan i zachowanie

    Tożsamość obiektu umożliwia współdzielenie komponentów przy konstrukcji różnych obiektów złożonych, a zatem rozszerza semantykę. Tożsamość obiektów powoduje, że istnienie obiektów jest niezależne od ich wartości. W konsekwencji mamy dwie płaszczyzny porównywania obiektów:

    Równość obiektów jest cechą tymczasową, podczas gdy identyczność jest cechą stałą. W niektórych modelach danych wprowadza się trzeci typ płaskiej równości.

    W zależności od sposobu konstrukcji identyfikatorów, wyróżniamy identyfikatory fizyczne i logiczne. Identyfikatory fizyczne wskazują lokalizację reprezentacji obiektu w pamięci zewnętrznej.

    Klasyfikując identyfikatory można rozróżnić co najmniej 4 typy OID:

    1. Adres fizyczny. Identyfikator jest adresem fizycznym obiektu. Taka reprezentacja jest zwykle używana przez j. programowania. Zaletą tego sposobu jest wysoki stopień efektywności systemu. Podejście takie jest praktycznie bezużyteczne dla baz danych, ponieważ jeśli obiekt jest np. przesuwany, musiałaby zmianie ulec jego identyfikator, a zatem wszystkie odwołania do tego obiektu.

    2. Adres strukturalny. Identyfikator składa się z 2 części:

  • 3. Surogat. Identyfikator jest generowany przy użyciu algorytmu, który gwarantuje jego unikalność (np. zwiększać o 1 licznik). Także Identyfikatory są przekształcane na adres fizyczny obiektu, przeważnie przy użyciu technik indeksujących.

  • Sugorat odwołujący się do typu. Jest to wariant poprzedniej metody ale taki w którym korzysta się z identyfikatora (klasy) jak i części identyfikującej obiekt. Dla każdego typu inny licznik generujący części identyfikatora obiektu właściwą dla tego typu.

  • Wybór metody identyfikowania obiektów ma zasadnicze znacznie dla efektywności systemu. Na efektywność pracy systemu wpływa także długość OID. Zwykle wynosi ona 32 do 48 bitów (32 bity pozwalają na zarządzanie do 4mln obiektów).

    Dłuższe 64 bitowe OID mogą być potrzebne gdy:

    W podejściu z pełną enkapsulacją, wartość atrybutów są dostępne dla świata zewnętrznego jedynie za pomocą odpowiednich procedur (metod) wywoływanych dla danego obiektu. Przy pomocy takich procedur obiekt może się komunikować z innym obiektem.

    13. Klasy i enkapsulacja w modelu obiektowym.

    Jest zbiorem obiektów posiadających tą samą strukturę wewnętrzną tzn. te same atrybuty i te same metody. Zatem klasę definiuje implementację zbioru obiektów, natomiast typ opisuje jak te obiekty które mogą być używane.

    Pojęcie klasy może być rozumiane szerzej niż pojęcie typu:

    Jeżeli chcemy zachować zasadę, że każdy obiekt jest wystąpieniem pewnej klasy załóżmy, że klasy są obiektami wtedy dla zachowania jednolitości opisu wygodne jest wprowadzenie pojęcia Metaklasy - jako klasy klas. Jeżeli metaklasy występują w systemie to nie są one bezpośrednio dostępne dla użytkownika.

    Opis klasy - składa się z następujących elementów:

    Opisu dynamicznego zachowań obiektów definicji metod czyli operacji widocznych na zewnątrz obiektu a pozwalających dokonać manipulacji na danych . Metoda uaktywniona jest przez komunikat adresowany do tzw. Obiektu docelowego i w standardowym przypadku operuje wyłącznie na danych wchodzących w skład tego obiektu.

    14. Zagadnienie dziedziczenia w modelu obiektowym.

    Dziedziczenie jest jednym z najmocniejszych mechanizmów programowania obiektowego i obiektowych baz danych . Pozwala na tworzenie nowych klas i zwanych podklasami z klas już istniejących . Nowe klasy dziedziczą struktury danych i metody swoich nadklas a ponadto dołączają do nich swoje własne struktury i procedury . Stają się więc bardziej wyspecjalizowane od swoich pierwowzorów. Klasa nie dziedziczy nic od swoich podklas . Klasa może mieć wiele podklas. W niektórych systemach Klasa ma tylko jedną nadklasę , w innych może mieć więcej jest to tzw. dziedziczenie wielokrotne. Dziedziczenie jest przechodnie.

    Na poziomie modelowania dziedziczenie oznacza :

    Zalety dziedziczenia:

    1. Kod operacji jest używany przez wiele obiektów często należących do różnych klas, gdyż operacje mogą być zdefiniowane dla nadklasy zamiast dla poszczególnych klas.

    2. Dostarcza precyzyjniejszy i bardziej zbliżony do rzeczywistych zależności opis środowiska.

    3. Uproszczone definiowanie nowych klas

    4. Może mieć charakter bezpośredni (struktura/ metody przenoszone są do podklasy bez zmian) lub dokonuje się transformacji składników przed przekazaniem (np. zmienia się el. struktury danych ).

    Modele dziedziczenia:

    Koncepcja dziedziczenia odnosząca się do właściwości i zależności typów:

    Inna klasyfikacja wprowadza specjalistyczne pojęcia:

    Dziedziczenie pojedyncze- klasa ma jedną nadklasę

    Dziedziczenie wielokrotne- klasa może mieć wiele nadklas

    Polimorfizm - te same metody maja inne znaczenie w różnych obiektach.

    Problemy podczas dziedziczenia:

    1. nakładanie się więzów z obiektu z obiektu podczas dziedziczenia,

    2. nakładanie się więzów podczas wystąpień obiektu w wielu klasach,

    3. nakładanie się więzów na definiowanie podklas.

    Zasada zachowania spójności powinna zapewniać:

    1. spójność hierarchii dziedziczenia,

    2. zasada rozróżnialności nazwy,

    3. zasada pojedynczego pochodzenia,

    4. zasada pełnego dziedziczenia.

    Dziedziczenie wielokrotne i redefiniowanie atrybutów obiektów w podklasach:

    1. zasada pierwszeństwa podklas do nadklas,

    2. zasada pierwszeństwa między nadklasami różnego pochodzenia,

    3. zasada pierwszeństwa między nadklasami o tym samym pochodzeniu.

    Propagowanie zmian do podklas: 

    1. zasada propagacji i modyfikacji,

    2. zasada propagacji zmian w przypadkach wystąpienia konfliktu,

    3. zasada modyfikacji dziedzin.

    Agregacja i usuwanie zależności dziedziczenia:

    1. wprowadzania nadklas,

    2. zasada usuwania nadklas,

    3. zasada wprowadzania klasy do schematu.

    15. Problem wielowersyjności obiektów i obiektów multimedialnych.

    W standardowych systemach zarządzania baz danych zmodyfikowanie wartości atrybutu obiektu powoduje utratę poprzednich danych. W wielu zastosowaniach - a zwłaszcza w zastosowaniach obiektowych, do szeroko rozumianego komputerowego wspomagania projektowania, wspomagania inżynierii oprogramowania -niezbędne są wersje obiektów. Przez wersję obiektu rozumie się semantycznie znaczący rzut obiektu, dokonany w pewnym momencie czasowym.

    Z praktycznego punktu widzenia, tworzenie różnych wersji tego samego obiektu może mieć dwojaki charakter:

    1. wersji historycznych - odpowiadających przejściowym etapom rozwoju projektu, do których mogą być realizowane nawroty

    2. wersji wariantowych - przeznaczonych do różnych zastosowań dopasowanych do różnych gestów i potrzeb użytkownika

    Wielowersyjny jest nie tylko obiekt złożony będący celem projektu, lecz również większość jego komponentów. Nie wszystkie wersje różnych obiektów pasują do siebie. Finalne wersje wariantowe są zatem skomponowane ze szczególnych kombinacji wersji obiektów - komponentów. Z formalnego punktu widzenia, obiekt wielowersyjny jest częściowo uporządkowanym zbiorem wersji, które reprezentują jego różne stany. Poszczególne wersje obiektu mogą być tworzone od

    podstaw lub wyprowadzane z innych wersji. Zależnie od przyjętego modelu, zbiór wersji obiektu może mieć strukturę drzewa, lasu lub acyklicznego grafu skierowanego.

    16. Różnice i podobieństwa między modelem hierarchicznym, sieciowym, relacyjnym i obiektowym.

    Hierarchiczny model danych

    Hierarchiczny model danych jest pewnym rozszerzeniem modelu prostego, opartego na rekordach składających się z pól i zgrupowanych w plikach. W schemacie hierarchicznym wprowadza się typy rekordów i związki nadrzędny-podrzędny pomiędzy nimi.

    Operowanie danymi

    Typowe operacje na danych w tym modelu to wyszukiwanie rekordów określonego typu, podrzędnych względem danego rekordu, i spełniających warunki dotyczące zawartości określonych pól; usuwanie lub dodawanie rekordów i edycja ich pól. Realizowane są poprzez funkcje lub procedury pisane w językach programowania o charakterze zazwyczaj proceduralnym, np. C.

    Integralność danych

    Podstawowe warunki integralności wynikają z samej definicji struktury danych modelu:

    Każdy rekord (z wyjątkiem korzenia) musi być powiązany z rekordem nadrzędnym właściwego typu; a więc np. usunięcie rekordu nadrzędnego wiąże się z usunięciem wszystkich względem niego podrzędnych. Nie można wstawić rekordu bez powiązania go z rekordem nadrzędnym.

    Zawartość każdego pola rekordu musi odpowiadać typowi danych z definicji danego typu rekordu.

    Itp. Widać, że model hierarchiczny ma wiele wspólnego ze strukturą systemu plików.

    Sieciowy model danych

    Sieciowy model danych w ogólnym zarysie niewiele odbiega od hierarchicznego. W miejsce związku nadrzędny-podrzędny pomiędzy rekordami wprowadza się w nim tzw. typ kolekcji (set), który jest złożonym typem danych pola zawierającym odniesienia do innych rekordów określonego typu. Tzn. określenie typu kolekcji polega na podaniu typu rekordu-,,właściciela'' i typu rekordów-elementów kolekcji (oraz ew. klucza porządkowania elementów). Operowanie danymi ma też charakter proceduralny: typowe operacje to wyszukiwanie rekordu na podstawie zawartości pól i/lub przynależności do danego wystąpienia typu kolekcji, i dokonywanie modyfikacji bieżącego rekordu.

    Warunki integralności danych, poza oczywistymi już więzami dotyczącymi zgodności zawartości pól rekordu z określeniem typu rekordu i unikalności pól kluczowych, mogą być formułowane w terminach wymogu przynależności rekordu do jakiegoś wystąpienia określonego typu kolekcji.

    Relacyjny model danych

    Relacyjny model danych został opracowany przez E. F. Codda w latach 70-80, i od mniej więcej połowy lat 80 stał się podstawą architektury większości popularnych SZBD. Naszkicuję tu dość pobieżnie teoretyczne zasady modelu. Należy przy tym pamiętać, że w realnych implementacjach teoria ta bywa traktowana dość luźno tzn. jej zasady niekoniecznie są w pełni przestrzegane czy implementowane. Stąd omówienie to będzie raczej powierzchowne.

    Definicja danych

    Model relacyjny oparty jest na tylko jednej podstawowej strukturze danych -- relacji. Pojęcie relacji można uważać za pewną abstrakcję intuicyjnego pojęcia tabeli, zbudowanej z wierszy i kolumn, w której na przecięciu każdej kolumny z każdym wierszem występuje określona wartość. Baza danych jest zbiorem relacji, o następujących własnościach:

    Każda relacja w bazie danych jest jednoznacznie określona przez swoją nazwę.

    Każda kolumna w relacji ma jednoznaczną nazwę (w ramach tej relacji).

    Kolumny relacji tworzą zbiór nieuporządkowany. Kolumny nazywane bywają również atrybutami.

    Wszystkie wartości w danej kolumnie muszą być tego samego typu. Zbiór możliwych wartości elementów danej kolumny nazywany bywa też jej dziedziną.

    Również wiersze relacji tworzą nieuporządkowany zbiór; w szczególności, nie ma powtarzających się wierszy. Wiersze relacji nazywa się też encjami.

    Każde pole (przecięcie wiersza z kolumną) zawiera wartość atomową z dziedziny określonej przez kolumnę. Brakowi wartosci odpowiada wartość specjalna NULL, zgodna z każdym typem kolumny (chyba, że została jawnie wykluczona przez definicję typu kolumny).

    Każda relacja zawiera klucz główny -- kolumnę (lub kolumny), której wartości jednoznacznie identyfikują wiersz (a więc w szczególności nie powtarzają się). Wartością klucza głównego nie może być NULL.

    Do wiązania ze sobą danych przechowywanych w różnych tabelach używa się kluczy obcych. Klucz obcy to kolumna lub grupa kolumn tabeli, o wartościach z tej samej dziedziny co klucz główny tabeli z nią powiązanej.

    Np. baza danych instytucji składającej się z wielu zakładów może zawierać tabele zakłady i pracownicy: tabela zakłady zawiera m. in. kolumny kod_zakladu (klucz główny), nazwa, adres, kierownik,...; a tabela pracownicy: kolumny nr_prac (klucz główny), nazwisko, zakład, pokój, telefon, email,...; kolumna zakłady.kierownik może być kluczem obcym odnoszącym się do kolumny pracownicy.nr_prac; zaś kolumna pracownicy.zakład - kluczem obcym odnoszącym się do zakłady.kod_zakładu, etc. Unika się w ten sposób powielania tych samych danych w różnych tabelach, co m. in. ułatwia utrzymanie zgodności pomiędzy zawartością bazy danych a stanem faktycznym.

    Operacje na danych

    W teoretycznym opisie modelu relacyjnego operacje na danych definiuje się w terminach tzw. algebry relacyjnej. Operatory algebry relacyjnej mają za argumenty jedną lub więcej relacji, a wynikiem ich działania zawsze jest też relacja.

    Selekcja. Selekcja jest operacją jednoargumentową, określoną przez warunek dotyczący wartości kolumn danej relacji. Wynikiem jej jest relacja zawierające te wszystkie encje (wiersze) wyjściowej relacji, których atrybuty spełniają dany warunek.

    Rzut. Rzut to operacja jednoargumentowa określona przez podzbiór zbioru kolumn danej relacji, dająca w wyniku tabelę składającą się z tychże kolumn wyjściowej relacji.

    Iloczyn kartezjański. Argumentami są dwie relacje, wynikiem -- relacja, której wiersze są zbudowane ze wszystkich par wierszy relacji wyjściowych. Operacja o znaczeniu raczej teoretycznym.

    Równozłączenie. Argumentami są dwie relacje, posiadające kolumny o tych samych dziedzinach np. klucz główny jednej z nich i klucz obcy drugiej. Wynikiem jest tabela otrzymana z iloczynu kartezjańskiego relacji wyjściowych poprzez selekcję za pomocą warunku równości tych ,,wspólnych'' atrybutów.

    Złączenie naturalne. Powstaje z równozłączenia dwóch tabel poprzez rzutowanie usuwające powtarzające się kolumny złączenia. Rzeczywiście jest to operacja bardziej ,,naturalna'' aniżeli równozłączenie.

    Złączenia zewnętrzne. Tu sprawa się komplikuje. Złączenia zewnętrzne tworzone są podobnie jak złączenie naturalne, lecz z pozostawieniem w tabeli wynikowej także wierszy, dla których nie zachodzi równość atrybutów złączenia: w przypadku złączenia lewostronnego złączenie naturalne uzupełnia się o wiersze z pierwszego argumentu nie posiadające odpowiednika (wierszu o równym atrybucie złączenia) w drugim argumencie; ,,brakujące'' atrybuty przyjmują wartość NULL. W złączeniu prawostronnym robi się to samo, ale względem drugiego argumentu. Wreszcie złączenie obustronne obejmuje obydwie tabele wyjściowe tą samą operacją.

    Suma. Suma jest operatorem działającym na dwóch zgodnych relacjach (to jest o tych samych kolumnach), produkującym relację której wiersze są sumą teoriomnogościową wierszy z relacji wyjściowych.

    Przecięcie. Przecięcie znowu wymaga dwóch zgodnych tabel, wynikiem jest tabela zawierająca wiersze wspólne dla obu argumentów.

    Różnica. Różnica jest określona dla dwóch zgodnych relacji i odpowiada dokładnie różnicy teoriomnogościowej zbiorów wierszy tabel wyjściowych.

    Algebra relacyjna może być uważana za proceduralny język zapytań modelu relacyjnego. To znaczy, że dowolna informacja jaka jest do uzyskania z relacyjnej bazy danych może być wydobyta za pomocą ciągu operacji algebry relacyjnej.

    W praktyce w programowaniu aplikacji opartych na relacyjnych bazach danych nie korzysta się na ogół z języka proceduralnego, lecz z deklaratywnego języka opartego na tzw. rachunku relacyjnym (na ogół jest to SQL). Różnica polega na tym, że w języku proceduralnym formułuje się sekwencję kroków prowadzących do pożądanego wyniku, natomiast język deklaratywny służy do sformułowania tego, jaki wynik chcemy otrzymać. Oczywiście zapytanie sformułowane w języku deklaratywnym musi zostać przełożone na pewną procedurę aby mogło być wykonane -- jest to zadaniem implementacji DBMS. Bez znajomości żargonu algebry relacyjnej trudno jest jednak chociażby zrozumieć dokumentację systemów zarządzania baz danych (czy nawet opisy składni SQL).

    Integralność danych

    Model relacyjny dostarcza dodatkowych, specyficznych dla siebie postaci reguł integralności: