background image

RELACYJNE BAZY DANYCH

Podstawową właściwością relacyjnej bazy danych jest to, że informacje przechowywane są w tabelach,
a każda z tabel składa się z wierszy i kolumn. Wiersz tabeli jest pojedynczym rekordem składającym
się z kolumn. Element znajdujący się na przecięciu kolumny i wiersza to pole. Pole zawiera
najmniejszą niepodzielną wartość tzn. taką informację, która nie może być dalej dzielona ze względu
na swoją logiczną wartość.
Model relacyjnych baz danych opracował w końcu lat 60-tych matematyk E. F. Codd.

Struktury danych w modelu relacyjnym

Podstawową   strukturą   danych   jest   relacja   będąca   podzbiorem   iloczynu   kartezjańskiego   dwóch
wybranych zbiorów reprezentujących dopuszczalne wartości. W bazach danych relacja przedstawiana
jest   w   postaci   tabeli.   Relacja   jest   zbiorem   krotek   posiadających   taką   samą   strukturę,   lecz   różne
wartości. Każda krotka odpowiada jednemu wierszowi tablicy. Każda krotka posiada co najmniej jeden
atrybut   odpowiadający   pojedynczej   kolumnie   tablicy.   Każda   relacja   (tablica)   posiada   następujące
własności: 

krotki (wiersze) są unikalne 

atrybuty (kolumny) są unikalne 

kolejność krotek (wierszy) nie ma znaczenia 

kolejność atrybutów (kolumn) nie ma znaczenia 

wartości atrybutów (pól) są atomowe 

W przypadku projektowania tabeli w bazie danych należy stosować się do następujących wskazówek: 

Używaj nazw opisowych do nazwania kolumn tabeli. Kolumny nie powinny mieć znaczenia
ukrytego, ani reprezentować kilku atrybutów (złożonych w pojedynczą wartość). 

Bądź konsekwentny w stosowaniu liczby pojedynczej lub mnogiej przy nazywaniu tabeli. 

Twórz tylko te kolumny, które są niezbędne do opisania modelowanej encji lub powiązania -
tabele z mniejszą ilością kolumn są łatwiejsze w użyciu. 

Utwórz kolumnę pól kluczowych dla każdej tabeli. 

Unikaj powtarzania informacji w bazie danych (normalizacja). 

 

Przetwarzanie danych

Do wykonywania operacji na relacyjnych bazach danych służą operatory relacyjne. Operatory relacyjne
wchodzą w skład zapytań, które z kolei służą do wykonywania jednej bądź wielu operacji relacyjnych
na tabeli lub grupie tabel. Językiem pozwalającym na stosowanie operatorów relacyjnych jest język
SQL, którego odpowiedzią jest zawsze tabela. Nie oznacza to jednak, że użytkownik programu
działającego na bazie danych widzi tabele – wręcz przeciwnie – zazwyczaj dane zawarte w tabeli
wynikowej są wizualizowane w zgoła odmienny sposób i zależy on tylko od fantazji osoby
odpowiedzialnej za efekt wizualizacji i interfejs obsługi pisanej aplikacji.
Jednakże   sam   fakt,  że   wynikiem   zapytania   jest  „wirtualna”   tabela  jest   niezmiernie  istotny.  Dzięki

Copyright© mgr inż. Rafał Mikołajczak – Kopiowanie i rozpowszechnianie zabronione

background image

takiemu podejściu możemy zadać np. dwa pytania, w wyniku, których otrzymamy dwie tabele (czasami
całkiem pokaźne), do których z kolei możemy zadać kolejne pytanie otrzymując jedną (stosunkowo
małą) tabelę, co znacznie ułatwia proces selekcji danych. Oczywiście znając strukturę tabel i wynik
zapytań możemy od razu postawić kilka zapytań do bazy danych. Takie łączenie zapytań nazywane jest
zagnieżdżaniem zapytań i pozwala otrzymać wynik bardzo bliski (równy) oczekiwanej odpowiedzi.

Integralność danych

Zasady integralności wymagają, aby każdy wiersz tabeli zawierał wartość lub grupę wartości, które
określałyby   go   w   sposób   jednoznaczny   (unikalny).   Te   wybrane   wartości   nazywane   są  kluczem
głównym
  (primary  key),  natomiast   kolumna   bądź   grupa   kolumn   z   innej   tablicy,  która   odpowiada
kluczowi głównemu tablicy pierwszej nazywana jest kluczem obcym (foreign key). Dodatkowe reguły
integralności mogą być nałożone na wybrane kolumny. 

 

JĘZYK   SQL

 SQL – Structured Query Language – Strukturalny Język Zapytań to zbiór komend służący do
wprowadzania, modyfikowania i przeglądania zawartości relacyjnej bazy danych.
 

Zarządzanie bazą danych

Komendy związane z administracją bazą danych służą do zakładania kont użytkowników, przydzielania
lub odbierania im uprawnień, czyli ustalania zakresu działania na danych oraz do innych zadań
administracyjnych. Większość systemów dostarcza indywidualne, specjalne narzędzia do konfiguracji i
obsługi bazy danych. Bardzo często dane traktujące o charakterze bazy danych są zawarte też w tabeli,
do której jednak dostęp ma tylko administrator systemu.

Standardy języka SQL

Największą zaletą języka SQL jest to, że mimo bardzo wielu komercyjnych i darmowych „silników”
baz danych – podstawowe elementy języka pozostają niezmienne.
Standard języka SQL jest sprawdzany i zatwierdzany przez międzynarodową organizację International
Standards Organization (ISO), natomiast w Stanach Zjednoczonych National Institute of Standards and
Testing (NIST).
 Obecnie obowiązuję standard przyjęty w 1992 r. i jest to SQL-92, jednakże żaden komercyjny produkt,
nie jest z nim całkowicie zgodny (chodzi tu głównie o firmowe rozszerzenia). 

OPERACJE RELACYJNE

Operacje relacyjne występują we wszystkich relacyjnych bazach danych a ich wynikami zawsze są
tabele.

Copyright© mgr inż. Rafał Mikołajczak – Kopiowanie i rozpowszechnianie zabronione

background image

 

 Tabela „Osoby”.

Id

Nazwisko

Imię

Woj
_id

1

Mikołajczak  Rafał

1

2

Nowak

Marek

3

3

Kowalski

Marek

2

4

Frąckowiak

Zdzisław 7

Selekcja

Operacja selekcji zwraca wynik w postaci grupy rekordów z tablicy i najczęściej polega na wybraniu, o
pewne kryteria tylko, grupy rekordów (może też oczywiście zwrócić także całą tablicę).
 SELECT * FROM Osoby WHERE Id=2;
  

Id

Nazwisko

Imię

Woj_i
d

2

Nowak

Marek 3

  

Projekcja

Projekcja pozwala określić kolumny, które będą zwracane przez zapytanie. To rozwiązanie posiada
dwie zalety – zmniejszenie ilości informacji w odpowiedzi oraz zdecydowane przyspieszenie działania.
  SELECT Nazwisko FROM Osoby WHERE Imię = ‘Marek’;
  

Nazwisko
Nowak
Kowalski

Złączenie

Operacja złączenia ( JOIN ) umożliwia wykorzystanie wielu tabel jako źródła danych dla zapytania.
 
  Tabela „Woj”

Copyright© mgr inż. Rafał Mikołajczak – Kopiowanie i rozpowszechnianie zabronione

background image

Id

Nazwa

1

wielkopolskie

2

śląskie

  SELECT Nazwisko, Nazwa FROM Osoby, Woj. WHERE Osoby.Woj_id = Woj.Id;
  

Nazwisko

Nazwa

Mikołajczak Wielkopolskie
Kowalski

śląskie

 

Podstawowe zasady modelu relacyjnego to:

1. Dane prezentowane są użytkownikom w postaci tabel; 
2. Komórki zawierają wartości niepodzielne na mniejsze porcje informacji 
3. Każdy wiersz posiada wartość (lub grupę wartości), która go jednoznacznie identyfikuje (klucz

główny) 

4. W przypadku określenia relacji miedzy tabelami dane z kolumny połączonej relacją muszą mieć

swoje odpowiedniki w drugiej tabeli. 

 
Zasady mówiących o zagrożeniach, których należy się wystrzegać a stanowią „podstawy” źle
skonstruowanej bazy danych:

1. Tabele i kolumny mają niejasne nazwy (po n - czasie na pewno zapomnimy o co chodziło) 
2. Ta sama informacja musi być wprowadzona kilkakrotnie a jej zmiana musi być dokonywana w

kilku różnych miejscach 

3. Działanie bazy danych jest nieproporcjonalnie wolne do ilości obrabianych danych 
4. Trudno określić relacje między danymi 
5. W tabelach występują duplikujące się wiersze 
6. Jest prawdziwą tragedią, kiedy to samo pytanie do tych samych danych zwraca różne wyniki 

 Etapy projektowania bazy danych to:

1. Określenie wymagań, zadań i celu przeznaczenia projektowanej bazy danych; 
2. Określenie rodzaju danych (typów) przechowywanych w konkretnych kolumnach tabel; 
3. Przeprowadzenie normalizacji; 
4. Napisanie kodu tworzącego bazę i tabele bazy; 
5. Zdefiniowanie użytkowników i praw dostępu; 
6. Wypełnienie bazy informacjami – ew. przeprowadzenie testów; 

 

INSTRUKCJA SELECT

Projekt przykładowej tabeli.

Copyright© mgr inż. Rafał Mikołajczak – Kopiowanie i rozpowszechnianie zabronione

background image

 Tabela Osoby

Id

Imię

Zarobki

Dochody

1

Rafał

100

200

2

Marek

200

250

3

Kamil

50

500

4

Zdzisław

300

120

 INSTRUKCJA SELECT

Instrukcja SELECT składa się z wielu klauzul, z których część jest opcjonalna. Prosta składnia tej
funkcji wygląda następująco:
SELECT lista_pol
FROM nazwa_tabeli [,nazwa_innej_tabeli, ...]
[WHERE warunek];
  Najprostszą funkcję SELECT można zapisać:
SELECT * FROM nazwa_tabeli; 
  Znak „*” jest znakiem szczególnym i mówi, że z tabeli mają zostać wybrane wszystkie kolumny w
rzeczywistym porządku.
 
Używanie znaku „*” w zapytaniu ma jednak dwie wady:

1. Takie zapytanie jest mało przejrzyste (szczególnie bolesne w procesie poprawiania programu

wykorzystującego język SQL), gdyż nie daje nam informacji jakie kolumny są w tym zapytaniu
wykorzystywane; 

2. Użycie   tego   znaku   znacznie   obniża   wydajność   (szybkość)   wykonania   polecenia   SELECT.

Nawet,   gdy  rzeczywiście   potrzebujemy  pobrać   wszystkie   informacje   z   całej   tabeli,   o   wiele
szybciej dostaniemy odpowiedź wypisując nazwy wszystkich kolumn po instrukcji SELECT. 

 

Wykonywanie obliczeń na danych

Wyrażenie wykonywane w zapytaniach nie musi koniecznie zawierać nazw kolumn – można używać
też liczb, wyrażeń algebraicznych bądź łańcuchów znaków np.:
 SELECT ‘Cokolwiek’, Imię, 3+6 FROM Osoby; 

Cokolwiek

Imię

3+6

Cokolwiek

Rafał

9

Cokolwiek

Marek

9

Cokolwiek

Kamil

9

Copyright© mgr inż. Rafał Mikołajczak – Kopiowanie i rozpowszechnianie zabronione

background image

Cokolwiek

Zdzisław

9

 A teraz niewielka zmiana:
SELECT ‘Cokolwiek’, Imię, ‘3+6’ FROM Osoby; 

Cokolwiek

Imię

3+6

Cokolwiek

Rafał

3+6

Cokolwiek

Marek

3+6

Cokolwiek

Kamil

3+6

Cokolwiek

Zdzisław

3+6

, bo oczywiście 3+6 ujęte w pojedynczy cudzysłów to już łańcuch znaków a nie wyrażenie
algebraiczne.
 W instrukcji SELECT możemy także dokonywać obliczeń na kolumnach:
SELECT Imię, Zarobki, Zarobki*3 FROM Osoby;

Imię

Zarobki

Zarobki*3

Rafał

100

300

Marek

200

600

Kamil

50

150

Zdzisław

300

900

 A nawet tak:
SELECT Imię, Zarobki, Dochody, Dochody – Zarobki FROM Osoby;

Imię

Zarobki Dochody Dochody - Zarobki

Rafał

100

200

100

Marek

200

250

50

Kamil

50

500

450

Zdzisła
w

300

120

-180

 

Operatory arytmetyczne

 Język SQL posiada kilka typów operatorów arytmetycznych, które można wykorzystać w obliczeniach,
zapytaniach czy podczas zakładania filtrów. W kolejności wykonywania działań przedstawiają się one
następująco:
( )        -          Nawiasy;
/           -          Dzielenie;
*          -          Mnożenie;

Copyright© mgr inż. Rafał Mikołajczak – Kopiowanie i rozpowszechnianie zabronione

background image

-          -          Odejmowanie;
+          -          Dodawanie;
 Przykład wykorzystania:
SELECT Imię, (((0.19 * Zarobek) + 100)*2) FROM Osoby;

Imię

(((0.19 * Zarobek) + 100)*2)

Rafał

238

Marek

476

Kamil

219

Zdzisław

714

 

Instrukcja AS

 Instrukcja AS służy do przypisywania kolumnom lub wyrażeniom innych nazw.
Składnia takiej instrukcji wygląda następująco:
SELECT wyrażenie_1 [AS alias], wyrażenie_2 [AS alias] ,...
FROM nazwa_tabeli [lista_tabel]
[WHERE warunek];
Np.:
SELECT Imię, (((0.19 * Zarobek) + 100)*2) AS Podwyżka FROM Osoby; 

Imię

Podwyżka

Rafał

238

Marek

476

Kamil

219

Zdzisław

714

 

Filtrowanie wyników zapytania za pomocą klauzuli WHERE

Operatory do porównań:
=          -          Równy;
<>, !=  -          Nierówny;
>          -          Większy;
<          -          Mniejszy;
>=       -          Większy lub równy;

Copyright© mgr inż. Rafał Mikołajczak – Kopiowanie i rozpowszechnianie zabronione

background image

<=       -          Mniejszy lub równy;
 Przykłady:
SELECT Imię FROM Osoby WHERE Id=3;

Imię
Kamil

 
SELECT Id, Imię FROM Osoby WHERE Zarobki < 250;

Id

Imię

1

Rafał

2

Marek

3

Kamil

 SELECT Imię FROM Osoby WHERE Imię <> 'Rafał';

Imię
Marek
Kamil
Zdzisław

 SELECT Imię, Zarobki, Dochody FROM Osoby WHERE Dochody < Zarobki;

Imię

Zarobki

Dochody

Zdzisław

300

120

 
 

SORTOWANIE WYNIKÓW ZAPYTAŃ

Składnia instrukcji SELECT używającej klauzuli ORDER BY wygląda następująco:

SELECT nazwy_kolumn

FROM nazwa_tabeli [ lista_tabel ]
[WHERE warunek]
[ORDER BY { kolumna, alias, pozycja} [ASC | DESC]]
SELECT Id, Imię, Zarobki, Dochody FROM Osoby ORDER BY Imię;

Id

Imię

Zarobki

Dochody

3

Kamil

50

500

2

Marek

200

250

Copyright© mgr inż. Rafał Mikołajczak – Kopiowanie i rozpowszechnianie zabronione

background image

1

Rafał

100

200

4

Zdzisław

300

120

 
ASC – Ascending – rosnąco; 
DESC – Descending – malejąco; 
 

Copyright© mgr inż. Rafał Mikołajczak – Kopiowanie i rozpowszechnianie zabronione