Relacyjne bazy danych – ciąg dalszy. Język SQL. Reprezentacją

advertisement
Relacyjne bazy danych – ciąg dalszy. Język SQL.
Reprezentacją relacji jest dwuwymiarowa tabela złożona z kolumn i wierszy. Tabela ta musi
spełniać następujące założenia:
Liczba kolumn jest z góry ustalona.
Z każdą kolumną jest związana jej nazwa oraz dziedzina, określająca zbiór wartości, jakie mogą
wystąpić w kolumnie.
Na przecięciu wiersza i kolumny znajduje się pojedyncza (atomowa) wartość należąca do
dziedziny kolumny.
Wiersz reprezentuje jeden rekord informacji np. osobę.
W modelu relacyjnym abstrahujemy od kolejności wierszy (rekordów) i kolumn (pól w
rekordzie).
np.: Tabela wykładowców
IdWykładowcy Imię
Nazwisko
Tytuł
2137
Jan
Kowalski
Doktor
3245
Maciej
Jankowski
Docent
8976
Artur
Malinowski
Profesor
Relacje między tabelami i więzy integralności.
W relacyjnej bazie danych relacje między tabelami pozwalają zapobiec występowaniu
powtarzających (nadmiarowych) danych. Wyróżnia się
trzy typy relacji między tabelami.
1. Jedne – do – Wielu (1 – ∞)
2. Wiele – do – Wielu (∞– ∞)
3. Jeden – do – Jednego (1 – 1)
Jeden – do – Jednego
Typ relacji jeden-do-jednego występuje wtedy, gdy pojedynczy rekord w jednej tabeli jest
powiązany z pojedynczym rekordem w innej tabeli i odwrotnie. Na przykład do jednego
wyspecjalizowanego serwera plików może być przydzielony jeden technik.
Jedne – do – Wielu
Typ relacji jeden-do-wielu występuje wtedy, gdy jeden rekord w tabeli jest powiązany z wieloma
rekordami w innej tabeli. Na przykład jeden pracownik może korzystać z kilku składników
majątku, takich jak komputer, krzesło i biurko.
Wiele – do – Wielu
Typ relacji wiele-do-wielu występuje wtedy, gdy kilka rekordów w jednej tabeli jest powiązanych z
kilkoma rekordami w innej tabeli. Na przykład w firmie może się znajdować wiele komputerów
obsługiwanych przez kilku techników. Wielu techników może być odpowiedzialnych za wiele
komputerów.
Relacje mają „strony”. Na przykład jeden dostawca może dostarczać wiele składników majątku,
więc tabela Dostawcy znajduje się po stronie „jeden” relacji, a tabela Składniki majątku po stronie
„wiele”, co przedstawiono na ilustracji. Ale każdy składnik jest dostarczany prze jednego dostawcę
więc z punktu widzenia składnika jest powiązany z jednym dostawcą.
Należy zapamiętać następującą regułę: w celu utworzenia relacji jeden-do-wielu należy użyć klucza
podstawowego z tabeli po stronie „jeden” jako klucza obcego w tabeli po stronie „wiele”.
Ta sama reguła dotyczy także relacji jeden-do-jednego i wiele-do-wielu, ale występują pewne
różnice.
Język SQL.
SQL (ang. Structured Query Language wym. /ɛskjuːˈɛl/) – strukturalny język zapytań używany do
tworzenia, modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych.
Język SQL jest językiem deklaratywnym. Decyzję o sposobie przechowywania i pobrania danych
pozostawia się systemowi zarządzania bazą danych (DBMS). SQL został opracowany w latach 60.
w firmie IBM. Stał się 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 potocznie 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.
W 1986 SQL stał się oficjalnym standardem, wspieranym przez Międzynarodową Organizację
Normalizacyjną (ISO) i jej członka, Amerykański Narodowy Instytut Normalizacji (ANSI).
Wczesne wersje specyfikacji (SQL86 i SQL89) były w dużej mierze jedynie określeniem wspólnej
płaszczyzny łączącej różne istniejące wówczas produkty i pozostawiały wiele swobody twórcom
implementacji
Z technicznego punktu widzenia, SQL jest podjęzykiem danych. Oznacza to, że jest on
wykorzystywany wyłącznie do komunikacji z bazą danych. Jego wykorzystanie może być trojakie i
z tego względu wyróżnia się trzy formy SQL-a:
SQL interakcyjny (autonomiczny) wykorzystywany jest przez użytkowników w celu
bezpośredniego pobierania lub wprowadzania informacji do bazy.
Statyczny kod SQL (Static SQL) nie ulega zmianom i pisany jest wraz z całą aplikacją, podczas
której pracy jest wykorzystywany. . Statyczny SQL występuje w dwóch odmianach.
Embedded SQL (Osadzony SQL) oznacza włączenie kodu SQL do kodu źródłowego
innego języka. Większość aplikacji pisana jest w takich językach jak C++ czy Java, jedynie
odwołania do bazy danych realizowane są w SQL.
Język modułów. W tym podejściu moduły SQL łączone są z modułami kodu w innym
języku. Moduły kodu SQL przenoszą wartości do i z parametrów, podobnie jak to się dzieje
przy wywoływaniu podprogramów w większości języków proceduralnych.
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.
Użycie SQL, zgodnie z jego nazwą, polega na zadawaniu zapytań do bazy danych.
Zapytania można zaliczyć do jednego z czterech głównych podzbiorów:
•
•
•
•
SQL DML (ang. Data Manipulation Language – „język manipulacji danymi”),
SQL DDL (ang. Data Definition Language – „język definicji danych”),
SQL DCL (ang. Data Control Language – „język kontroli nad danymi”).
SQL DQL (ang. Data Query Language – „język definiowania zapytań”).
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 średnika.
DDL (Data Definition Language) pozwala 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 - służące do nadawania uprawnień do pojedynczych obiektów lub globalnie
konkretnemu użytkownikowi (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 – służące do odbierania wskazanych uprawnień konkretnemu użytkownikowi (np.
REVOKE ALL PRIVILEGES ON EMPLOYEE FROM PIOTR - odebranie użytkownikowi
wszystkich praw do tabeli EMPLOYEE).
DENY. - służące do odbierania uprawnień do pojedynczych obiektów lub globalnie
DML (Data Manipulation Language) służy do wykonywania operacji na danych – do ich
umieszczania w bazie, kasowania, przeglądania oraz dokonywania zmian. Najważniejsze polecenia
z tego zbioru to:
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 (').
DQL (Data Query Language) to język formułowania zapytań do bazy danych. W zakres tego
języka wchodzi jedno polecenie - SELECT. Często SELECT traktuje się jako część języka DML,
ale to podejście nie wydaje się właściwe, ponieważ DML z definicji służy do manipulowania
danymi - ich tworzenia, usuwania i uaktualniania. Na pograniczu obu języków znajduje się
polecenie SELECT INTO, które dodatkowo modyfikuje (przepisuje, tworzy) dane.
Jako że SQL jest językiem interpretowanym, istnieje możliwość nadużyć. Jeśli twórca aplikacji nie
zadba o sprawdzenie poprawności (tzw. walidację) danych wejściowych stanowiących część
zapytania, atakujący może być w stanie dopisać do zapytania („wstrzyknąć”) dodatkowe komendy
lub zmienić ich sposób działania. Atak taki nosi nazwę SQL injection (wstrzyknięcie kodu za
pomocą SQL).
Download