background image

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

background image

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) ?

background image

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)

background image

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

background image

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

background image

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)

background image

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. 

background image

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)

background image

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)

)

)

 

 

background image

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. 

background image

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;

background image

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)

background image

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,

background image

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.  

background image

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)

background image

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

background image

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.

background image

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


Document Outline