1
1
Wprowadzenie do projektowania baz danych na
Wprowadzenie do projektowania baz danych na
przykładzie bazy ms-mot
przykładzie bazy ms-mot
(wprowadzenie do baz danych na przykładzie języka
(wprowadzenie do baz danych na przykładzie języka
SQL, normalizacja bazy danych, definicja i
SQL, normalizacja bazy danych, definicja i
modyfikacja: tabel, typów danych, kluczy, relacji)
modyfikacja: tabel, typów danych, kluczy, relacji)
Prezentacja do ćwiczenia 2
Prezentacja do ćwiczenia 2
2
2
RDBMS - System Zarządzania Relacyjną Bazą Danych
RDBMS - System Zarządzania Relacyjną Bazą Danych
Zalety płynące z korzystania z RDBMS:
Zalety płynące z korzystania z RDBMS:
•
RDBMS pozwala na szybszy dostęp do danych niż w przypadku
RDBMS pozwala na szybszy dostęp do danych niż w przypadku
plików
plików
•
RDBMS można zadawać zapytania o dane spełniające konkretne
RDBMS można zadawać zapytania o dane spełniające konkretne
kryteria
kryteria
•
RDBMS pozwala na swobodny dostęp do danych
RDBMS pozwala na swobodny dostęp do danych
•
RDBMS posiada wbudowany system uprawnień i kontroli
RDBMS posiada wbudowany system uprawnień i kontroli
dostępu do danych
dostępu do danych
Wielką zaletą jest zazwyczaj zgodność RDBMS ze standardem SQL
Wielką zaletą jest zazwyczaj zgodność RDBMS ze standardem SQL
Dlaczego RDBMS (Baza Danych) ?
Dlaczego RDBMS (Baza Danych) ?
3
3
Wprowadzenie do relacyjnych baz danych
Wprowadzenie do relacyjnych baz danych
Relational Database Management System - System Zarządzania Relacyjną
Bazą Danych
Relacyjny model został opracowany przez Edgara Franka Codd’a na
przełomie lat 70 i 80. Od tamtego czasu jest postawą tworzenia
Relacyjnych Systemów Baz Danych
Idea relacyjnych baz danych:
1.
Wszystkie wartości danych oparte są na prostych typach danych
2.
Wszystkie dane w bazie relacyjnej przedstawiane są w formie
dwuwymiarowych tabel (w matematyce relacja)
3.
Każda tabela zawiera zero lub więcej wierszy i jedną lub więcej kolumn
4.
Na każdy wiersz składają się jednakowo ułożone kolumny wypełnione
wartościami, które z kolei w każdym wierszu mogą być inne
5.
Po wprowadzeniu danych do bazy, możliwe jest porównywanie wartości z
różnych kolumn, zazwyczaj również z różnych tabel, i scalanie wierszy, gdy
pochodzące z nich wartości są zgodne
6.
Wszystkie operacje wykonywane są w oparciu o algebrę relacji
7.
W celu jednoznacznej identyfikacji wiersza pojawia się potrzeba obecności
jednej lub więcej kolumn niepowtarzalnych w granicach całej tabeli,
pozwalających odnaleźć konkretny wiersz. Kolumny takie określa się jako
"klucz podstawowy" (PRIMARY KEY)
4
4
SQL – definicje, podział
SQL – definicje, podział
•
SQL - strukturalny język zapytań używany do tworzenia,
modyfikowania baz danych oraz do umieszczania i pobierania
danych z baz danych opracowany w latach 70 przez firmę IBM. Do
dziś standard komunikacji z serwerami baz danych.
•
Podział języka SQL (Warstwy języka SQL)
• DML (Data Manipulation Language) – SELECT, INSERT, UPDATE,
DELETE [Manipulacja danymi]
• DDL (Data Definition Language) - CREATE, DROP, ALTER
[Definicja danych]
• DCL (Data Control Language) – GRANT, REVOKE, DENY
[Kontrola nad danymi]
Popularne systemy baz danych wykorzystujące SQL to: DB2,
Popularne systemy baz danych wykorzystujące SQL to: DB2,
Firebird, Ingres, MS Acces, MS SQL Server, MySQL, Oracle,
Firebird, Ingres, MS Acces, MS SQL Server, MySQL, Oracle,
PostgreSQL, SQL Lite, Sybase
PostgreSQL, SQL Lite, Sybase
5
5
•
Relacyjna baza danych składa się relacji, zwanych zazwyczaj
Relacyjna baza danych składa się relacji, zwanych zazwyczaj
tabelami. Tabela jest dokładnie tym co oznacza – tabelą danych
tabelami. Tabela jest dokładnie tym co oznacza – tabelą danych
(analogia - arkusze kalkulacyjne)
(analogia - arkusze kalkulacyjne)
•
Każda kolumna posiada wyróżniającą ją nazwę i zawiera inny
Każda kolumna posiada wyróżniającą ją nazwę i zawiera inny
rodzaj danych (Tabela przechowuje dane różnych typów: napis,
rodzaj danych (Tabela przechowuje dane różnych typów: napis,
liczba itp., a kolumna jednego typu.
liczba itp., a kolumna jednego typu.
•
Każdy wiersz odpowiada innemu klientowi, format tabelaryczny
Każdy wiersz odpowiada innemu klientowi, format tabelaryczny
powoduje, że każdy wiersz (ang. row) ma te same atrybuty,
powoduje, że każdy wiersz (ang. row) ma te same atrybuty,
nazywane również polami (ang. field).
nazywane również polami (ang. field).
•
Wiersz to inaczej rekord lub krotka
Wiersz to inaczej rekord lub krotka
Tabela, wiersz, kolumna
Tabela, wiersz, kolumna
6
6
Podstawowe typy danych w MS SQL:
Podstawowe typy danych w MS SQL:
•
Dane tekstowe:
Dane tekstowe:
•
char, varchar, nchar, ntest, nvarchar
char, varchar, nchar, ntest, nvarchar
•
Liczbowe:
Liczbowe:
•
int, smallint, bigint, tinyint, float, real, decimal, numeric
int, smallint, bigint, tinyint, float, real, decimal, numeric
•
Data i czas
Data i czas
•
datetime, smalldatetime
datetime, smalldatetime
•
Binarne
Binarne
•
binary, varbinary
binary, varbinary
•
Waluta
Waluta
•
mony, smallmony
mony, smallmony
•
Specjalne
Specjalne
•
text, image, bit
text, image, bit
Typy danych (MS SQL)
7
7
Dodatkowe opcje dla typów danych
Dodatkowe opcje dla typów danych
Opcje dotyczące wszystkich typów
Opcje dotyczące wszystkich typów
PRIMARY KEY: określa daną kolumnę jako klucz główny tabeli. Tabela może
PRIMARY KEY: określa daną kolumnę jako klucz główny tabeli. Tabela może
posiadać tylko jeden klucz główny, jego wartości nie mogą się powtarzać
posiadać tylko jeden klucz główny, jego wartości nie mogą się powtarzać
oraz muszą by różne od NULL
oraz muszą by różne od NULL
DEFAULT wartość domyślna: określa wartość domyślną kolumny dla nowo
DEFAULT wartość domyślna: określa wartość domyślną kolumny dla nowo
wprowadzanych wierszy w przypadku, gdy instrukcja tworząca nowy
wprowadzanych wierszy w przypadku, gdy instrukcja tworząca nowy
wiersz nie zadaje tej wartości. Jeśli w definicji kolumny pominięto opcję
wiersz nie zadaje tej wartości. Jeśli w definicji kolumny pominięto opcję
DEFAULT (oraz nie podano opcji NOT NULL), to w takich wypadkach
DEFAULT (oraz nie podano opcji NOT NULL), to w takich wypadkach
wartością domyślną jest NULL. Jeżeli natomiat kolumna bez opcji DEFAULT
wartością domyślną jest NULL. Jeżeli natomiat kolumna bez opcji DEFAULT
została zadeklarowana jako NOT NULL, to w miejsce brakującej wartości
została zadeklarowana jako NOT NULL, to w miejsce brakującej wartości
zostanie automatycznie wprowadzona przez RDBMS wartość domyślna
zostanie automatycznie wprowadzona przez RDBMS wartość domyślna
zależna od typu.
zależna od typu.
8
8
NOT NULL | NULL: określa, czy NULL jest dopuszczalną wartością w tej
NOT NULL | NULL: określa, czy NULL jest dopuszczalną wartością w tej
kolumnie. Domyślnie wartość NULL jest dopuszczalna, za wyjątkiem kluczy
kolumnie. Domyślnie wartość NULL jest dopuszczalna, za wyjątkiem kluczy
REFERENCES: opcja ta służy do deklarowania kluczy obcych i wymaga
REFERENCES: opcja ta służy do deklarowania kluczy obcych i wymaga
podania jako argumentu nazwy tabeli powiązanej, ew. kluczy powiązanych.
podania jako argumentu nazwy tabeli powiązanej, ew. kluczy powiązanych.
IDENTITY: podobne do typu danych auto-numeracji w bazach danych
IDENTITY: podobne do typu danych auto-numeracji w bazach danych
Microsoft Access oraz auto increment w MySQL. W każdej z tablic
Microsoft Access oraz auto increment w MySQL. W każdej z tablic
dozwolona jest jedna kolumna z własnością IDENTITY musi być ona także
dozwolona jest jedna kolumna z własnością IDENTITY musi być ona także
typu całkowitego lub zgodna z typem całkowitym.
typu całkowitego lub zgodna z typem całkowitym.
np.: identity (1,1) oznacza numerowanie od 1 co 1.
np.: identity (1,1) oznacza numerowanie od 1 co 1.
Przykłady:
Przykłady:
•
id
integer not null Primary Key;
integer not null Primary Key;
•
Alter table wyp_s add foreign key(id_skuter) references skuter (id_skuter)
Alter table wyp_s add foreign key(id_skuter) references skuter (id_skuter)
9
9
Tworzenie tabel (MS SQL)
Tworzenie tabel (MS SQL)
Przykład utworzenie tablicy „klient”:
Przykład utworzenie tablicy „klient”:
create table klient
create table klient
(
(
id_klienta int identity (1,1) not null,
id_klienta int identity (1,1) not null,
imie varchar(50) not null,
imie varchar(50) not null,
nazwisko varchar(50) not null,
nazwisko varchar(50) not null,
ulica varchar(10) not null,
ulica varchar(10) not null,
numer varchar(10) not null,
numer varchar(10) not null,
miejscowosc varchar(50) not null,
miejscowosc varchar(50) not null,
kod_pocz varchar(10) not null,
kod_pocz varchar(10) not null,
nr_tel varchar(20) not null,
nr_tel varchar(20) not null,
Primary Key (id_klienta)
Primary Key (id_klienta)
)
)
10
10
Modyfikacja struktury tabel
Modyfikacja struktury tabel
ADD [COLUMN] definicja_kolumny [AFTER kolumna | FIRST]:
ADD [COLUMN] definicja_kolumny [AFTER kolumna | FIRST]:
stworzenie nowej kolumny, według definicji o składni analogicznej jak w
stworzenie nowej kolumny, według definicji o składni analogicznej jak w
instrukcji CREATE TABLE. Opcje pozwalają zażądać, by nowa kolumna
instrukcji CREATE TABLE. Opcje pozwalają zażądać, by nowa kolumna
została stworzona w określonej pozycji (rozszerzenie MySQL) --
została stworzona w określonej pozycji (rozszerzenie MySQL) --
domyślnie umieszczana jest jako ostatnia.
domyślnie umieszczana jest jako ostatnia.
ALTER [COLUMN] nazwa_kolumny { SET DEFAULT wartość |
ALTER [COLUMN] nazwa_kolumny { SET DEFAULT wartość |
DROP DEFAULT }:
DROP DEFAULT }:
zmiana (lub usunięcie) wartości domyślnej z definicji istniejącej
zmiana (lub usunięcie) wartości domyślnej z definicji istniejącej
kolumny.
kolumny.
ADD INDEX [nazwa_indeksu]
ADD INDEX [nazwa_indeksu]
(nazwa_kolumny_indeksowej, ...):
(nazwa_kolumny_indeksowej, ...):
składnia analogiczna jak w deklaracji indeksu w instrukcji CREATE
składnia analogiczna jak w deklaracji indeksu w instrukcji CREATE
TABLE.
TABLE.
ADD UNIQUE [nazwa_indeksu]
ADD UNIQUE [nazwa_indeksu]
(nazwa_kolumny_indeksowej, ...):
(nazwa_kolumny_indeksowej, ...):
operacja analogiczna do ADD INDEX.
operacja analogiczna do ADD INDEX.
RENAME [AS] nowa_nazwa_tabeli:
RENAME [AS] nowa_nazwa_tabeli:
zmiana nazwy tabeli.
zmiana nazwy tabeli.
CREATE
CREATE
[
[
UNIQUE
UNIQUE
]
]
INDEX
INDEX
nazwa
nazwa
ON
ON
tabela (pole[
tabela (pole[
ASC
ASC
|
|
DESC
DESC
],...):
],...):
służy do tworzenia nowego indeksu w istniejącej tabeli.
służy do tworzenia nowego indeksu w istniejącej tabeli.
11
11
Instrukcja DROP
Instrukcja DROP
Drop jest poleceniem do usuwania obiektów w RDBMS.
Drop jest poleceniem do usuwania obiektów w RDBMS.
Składnia polecenia:
Składnia polecenia:
Usunięcie tabeli
Usunięcie tabeli
•
DROP TABLE [nazwa obiektu] {RESTRICT | CASCADE}
DROP TABLE [nazwa obiektu] {RESTRICT | CASCADE}
Usuwanie kolumn:
Usuwanie kolumn:
•
DROP [COLUMN] nazwa_kolumny;
DROP [COLUMN] nazwa_kolumny;
Usuwanie kluczy głównych:
Usuwanie kluczy głównych:
•
DROP PRIMARY KEY: usuwa klucz główny a w przypadku jego
DROP PRIMARY KEY: usuwa klucz główny a w przypadku jego
braku klucza głównego w tabeli, usuwa pierwszy w kolejności
braku klucza głównego w tabeli, usuwa pierwszy w kolejności
indeks typu UNIQUE
indeks typu UNIQUE
Usuwanie indeksów
Usuwanie indeksów
•
DROP INDEX nazwa_indeksu;
DROP INDEX nazwa_indeksu;
Usuwanie widoków
Usuwanie widoków
•
DROP VIEW nazwa_widoku;
DROP VIEW nazwa_widoku;
Usunięcie bazy danych
Usunięcie bazy danych
•
DROP DATABASE nazwa_bazy;
DROP DATABASE nazwa_bazy;
12
12
Klucz główny – Klucz podstawowy – Primary
Klucz główny – Klucz podstawowy – Primary
Key (PK)
Key (PK)
Problem:
Problem:
Konieczny jest sposób jednoznacznej identyfikacji klienta
Konieczny jest sposób jednoznacznej identyfikacji klienta
•
Nazwisko może się powtórzyć
Nazwisko może się powtórzyć
•
Adres także...
Adres także...
Rozwiązanie:
Rozwiązanie:
•
Wprowadzenie dodatkowej kolumny - id klienta
Wprowadzenie dodatkowej kolumny - id klienta
•
Id klienta liczba całkowita np. numer 6543 jednoznacznie go
Id klienta liczba całkowita np. numer 6543 jednoznacznie go
identyfikuje
identyfikuje
Kolumna lub zbiór kolumn jednoznacznie identyfikujący poszczególny
Kolumna lub zbiór kolumn jednoznacznie identyfikujący poszczególny
rekord (wiersz) w tabeli nazywane są kluczem głównym bądź
rekord (wiersz) w tabeli nazywane są kluczem głównym bądź
podstawowym (Primary Key)
podstawowym (Primary Key)
13
13
Definicja Kluczy głównych (MS SQL)
Definicja Kluczy głównych (MS SQL)
Sposób 1:
Sposób 1:
create table [klient]
create table [klient]
(
(
id_klienta int Identity (1,1) NOT
id_klienta int Identity (1,1) NOT
NULL,
NULL,
imie Varchar(50) NOT NULL,
imie Varchar(50) NOT NULL,
nazwisko Varchar(50) NOT NULL,
nazwisko Varchar(50) NOT NULL,
ulica Varchar(10) NOT NULL,
ulica Varchar(10) NOT NULL,
numer Varchar(10) NOT NULL,
numer Varchar(10) NOT NULL,
miejscowosc Varchar(50) NOT NULL,
miejscowosc Varchar(50) NOT NULL,
kod_pocz Varchar(10) NOT NULL,
kod_pocz Varchar(10) NOT NULL,
nr_tel Varchar(20) NOT NULL,
nr_tel Varchar(20) NOT NULL,
Primary Key (id_klienta)
Primary Key (id_klienta)
)
)
Sposób 2:
Sposób 2:
create table klient
create table klient
(
(
id_klienta int Identity (1,1) NOT
id_klienta int Identity (1,1) NOT
NULL,
NULL,
Primary Key
Primary Key
,
,
imie varchar(50) null,
imie varchar(50) null,
nazwisko varchar(50) null,
nazwisko varchar(50) null,
ulica varchar(10) null,
ulica varchar(10) null,
numer varchar(10) null,
numer varchar(10) null,
miejscowosc varchar(50) null,
miejscowosc varchar(50) null,
kod_pocz varchar(10) null,
kod_pocz varchar(10) null,
nr_tel varchar(20) null,
nr_tel varchar(20) null,
)
)
14
14
Klucz obcy
Klucz obcy
Klucz obcy jest kolumną lub zbiorem kolumn, który jest
Klucz obcy jest kolumną lub zbiorem kolumn, który jest
kluczem głównym w innej tabeli.
kluczem głównym w innej tabeli.
Uogólniając: klucz obcy jest kopią klucza głównego z innej tabeli, zawiera wartości występujące w
Uogólniając: klucz obcy jest kopią klucza głównego z innej tabeli, zawiera wartości występujące w
innej tabeli kolumnie klucza głównego.
innej tabeli kolumnie klucza głównego.
Relacja tworzona pomiędzy tabelami tworzona jest poprzez wzajemne
Relacja tworzona pomiędzy tabelami tworzona jest poprzez wzajemne
powiązanie klucza głównego z jednej tabeli z kluczem obcym w innej
powiązanie klucza głównego z jednej tabeli z kluczem obcym w innej
tabeli.
tabeli.
Wartość klucza obcego nie może istnieć bez powiązania z kluczem
Wartość klucza obcego nie może istnieć bez powiązania z kluczem
głównym.
głównym.
Przykład definicji klucza obcego:
Przykład definicji klucza obcego:
Alter table wypozyczenie add FOREIGN KEY(id) references
Alter table wypozyczenie add FOREIGN KEY(id) references
klient(id_klienta)
klient(id_klienta)
Podczas tworzenia klucza obcego, sprawdzane jest, czy kolumna w tabeli, do której odwołuje się
Podczas tworzenia klucza obcego, sprawdzane jest, czy kolumna w tabeli, do której odwołuje się
klucz obcy jest zadeklarowany w sposób gwarantujący unikatowość. Najczęściej kolumna do
klucz obcy jest zadeklarowany w sposób gwarantujący unikatowość. Najczęściej kolumna do
której odwołuje się klucz obcy jest kluczem głównym tabeli.
której odwołuje się klucz obcy jest kluczem głównym tabeli.
15
15
Relacje
Relacje
Bazy Danych wykorzystują klucze podstawowe i obce do określenia
Bazy Danych wykorzystują klucze podstawowe i obce do określenia
relacji między danymi z odrębnych tabel, podczas wykonywania
relacji między danymi z odrębnych tabel, podczas wykonywania
zapytania i nie tylko.
zapytania i nie tylko.
W relacyjnych bazach danych uwzględnia się istnienie trzech typów
W relacyjnych bazach danych uwzględnia się istnienie trzech typów
relacji. Są one klasyfikowane zależnie od liczby wartości, które
relacji. Są one klasyfikowane zależnie od liczby wartości, które
mogą wystąpić po każdej stronie relacji. Wyróżnia się więc relacje:
mogą wystąpić po każdej stronie relacji. Wyróżnia się więc relacje:
•
„
„
Jeden do jednego” (np. klient - adres)
Jeden do jednego” (np. klient - adres)
•
„
„
Jeden do wielu” (klient - wypożyczenia)
Jeden do wielu” (klient - wypożyczenia)
•
„
„
Wiele do wielu” (książka – autor, autor – książka, książka może
Wiele do wielu” (książka – autor, autor – książka, książka może
mieć wiele autorów, autor mógł napisać wiele książek)
mieć wiele autorów, autor mógł napisać wiele książek)
16
16
Typy relacji
Typy relacji
•
„
„
Jeden do jeden”:
Jeden do jeden”:
•
„
„
Jeden do wielu”:
Jeden do wielu”:
•
„
„
Wiele do
Wiele do
wielu”:
wielu”:
Tabela pośrednia
17
17
Normalizacja bazy danych, postacie normalne
Normalizacja bazy danych, postacie normalne
Normalizacja - proces projektowania bazy danych tak, aby utworzyć zbiór tabel
o odpowiedniej strukturze jest nazywany normalizacją lub sprowadzaniem do
postaci normalnej. Normalizacja polega na kolejnych podziałach tabel na
mniejsze tabele, które są z kolei łączone w zapytaniach. Stopień normalizacji
jest wynikiem wypośrodkowania między teorią i praktyką normalizacji.
Postacie normalne:
•
Pierwsza postać normalna (1NF) – postać najsłabsza, wymaga jedynie, aby
dziedziny atrybutów były elementarne (nierozkładalne, atomowe), czyli np.
liczby całkowite, daty, łańcuchy, a nie np. listy liczb lub zbiory dat.
• w poszczególnych tabelach eliminujemy powtarzające się grupy
• dla każdego zestawu danych pokrewnych, tworzymy oddzielne wiersze
• dla każdego zestawu danych pokrewnych określamy klucz podstawowy
•
Druga postać normalna (2NF) – wymaga, aby w wierszu nie było danych
zależnych od fragmentu klucza głównego.
•
Trzecia postać normalna (3NF) – gdy nie istnieją żadne zależności
przechodnie (nietrywialne).
• Eliminacja
pól, które nie zależą od klucza.
pól, które nie zależą od klucza.
18
18
Postacie normalne
Postacie normalne
Cel normalizacji:
•
uniknięcie redundancji (tj. powtarzania się pól z identycznymi
wartościami w różnych tabelach)
•
wyeliminowanie niewygodnych relacji wieloznacznych
•
uniknięcie anomalii przy aktualizacji: modyfikacji, wstawianiu i
usuwaniu
•
uniknięcie niespójności
Koszt:
Mnożenie liczby tabel
Wydłużenie czasu dostępu do danych