You are on page 1of 32

BAZY DANYCH I BIG DATA

Projekt i implementacja relacyjnej bazy danych

Temat: Salon samochodowy

Autorzy:
Adam Kowalkowski 325288
Dawid Markowski 325302

Prowadzący:
Dr hab.inż. Marcin Kowalczyk

1
Projekt BDBT – Spis treści
1. Zakres i cel projektu (opis założeń funkcjonalnych projektowanej bazy
danych)…..................................................................................................3
2. Definicja systemu.................................................................................3
2.1 Perspektywy użytkowników.............................................................................................................4

3. Model konceptualny.............................................................................4
3.1 Definicja zbiorów encji określonych w projekcie (decyzje projektowe)…........................................4

3.2 Ustalenie związków między encjami i ich typów..............................................................................5

3.3 Określenie atrybutów i ich dziedzin.................................................................................................7

3.4 Dodatkowe reguły integralnościowe (reguły biznesowe).................................................................10

3.5 Klucze kandydujące i główne (decyzje projektowe).........................................................................10

3.6 Schemat ER na poziomie konceptualnym........................................................................................11

3.7 Problem pułapek szczelinowych i wachlarzowych – analiza i przykłady...........................................12

4. Model logiczny......................................................................................13
4.1 Charakterystyka modelu relacyjnego...............................................................................................13

4.2 Usunięcie właściwości niekompatybilnych z modelem relacyjnym - przykłady................................13

4.3 Proces normalizacji – analiza i przykłady..........................................................................................14

4.4 Schemat ER na poziomie modelu logicznego...................................................................................15

4.5 Więzy integralności...........................................................................................................................15

4.6 Proces denormalizacji – analiza i przykłady.....................................................................................15

5. Faza fizyczna.........................................................................................17
5.1 Projekt transakcji i weryfikacja ich wykonalności.............................................................................17

5.2 Strojenie bazy danych – dobór indeksów.........................................................................................18

5.3 Skrypt SQL zakładający bazę danych.................................................................................................19

5.4 Przykłady zapytań i poleceń SQL odnoszących się do bazy danych...................................................32

Bibliografia................................................................................................32

2
1. Zakres i cel projektu (opis założeń funkcjonalnych projektowanej
bazy danych)
Celem projektu było opracowanie oraz zaimplementowanie „relacyjnej bazy
danych”.
Osiągnięcie tego zadania wymagało realizacji trzech zasadniczych faz składających się na cały
proces: konceptualnej, relacyjnej oraz fizycznej. Pierwsze dwie fazy dotyczyły modelowania
schematu bazy danych (model/schemat ER – Entity Relationship), natomiast trzecia –
właściwej implementacji w określonym silniku bazy danych.
Zrealizowana baza danych dotyczy obsługi i zarządzania domem kultury. W bazie,
oprócz informacji o samym domu kultury, przechowywane są również dane o
organizowanych wydarzeniach oraz zajęciach kulturalnych. W poczet klientów można
zaliczyć zarówno osoby prywatne, jak i szkoły. Dom kultury zatrudnia pracowników na
różnego rodzaju stanowiska, wśród których można wyróżnić pracowników recepcji,
nauczycieli, obsługę techniczną oraz sprzątającą. Dodatkowo, baza umożliwia ewentualne
wprowadzenie informacji o językach obcych, jeśli tylko ich znajomość chcą zaznaczyć
pracownicy. Każdemu z pracowników może przysługiwać wypłacane co miesiąc
wynagrodzenie.
Oprogramowanie, które było potrzebne podczas realizacji projektu, składało się z:

• lokalnej bazy danych Oracle Database w wersji 19c,


• narzędzia do projektowania bazy danych Toad Data Modeler w wersji 7.2,
• narzędzia graficznego do zarządzania bazą danych SQL Developer w wersji 20.4.1,

2. Definicja systemu
Definicja systemu zakłada następujące funkcjonalności:

• Podgląd informacji o salonie samochodowym


• Dodawanie/modyfikowanie/usuwanie informacji o salonie samochodowym
• Podgląd informacji o warsztacie
• Dodawanie/modyfikowanie/usuwanie o warsztacie
• Podgląd informacji o pracowniku
• Dodawanie/modyfikowanie/usuwanie informacji o pracowniku
• Podgląd informacji o pracowniku jako sprzedawcy
• Dodawanie/modyfikowanie/usuwanie informacji o pracowniku jako sprzedawcy
• Podgląd informacji o pracowniku jako serwisancie
• Dodawanie/modyfikowanie/usuwanie informacji o pracowniku jako serwisancie
• Podgląd informacji o kliencie
3
• Dodawanie/modyfikowanie/usuwanie informacji o kliencie
• Podgląd informacji o kliencie jako firmie
• Dodawanie/modyfikowanie/usuwanie informacji o kliencie jako firmie
• Podgląd informacji o kliencie jako osobie prywatnej
• Dodawanie/modyfikowanie/usuwanie informacji o kliencie jako osobie prywatnej
• Podgląd informacji o samochodzie
• Dodawanie/modyfikowanie/usuwanie informacji o samochodzie
• Podgląd informacji o samochodzie jako samochodzie dostawczym
• Dodawanie/modyfikowanie/usuwanie informacji o samochodzie jako samochodzie
dostawczym
• Podgląd informacji o samochodzie jako samochodzie osobowym
• Dodawanie/modyfikowanie/usuwanie informacji o samochodzie jako samochodzie
osobowym

2.1 Perspektywy Użytkowników


Wśród głównych użytkowników mogących mieć styczność z potrzebą użytkowania
opisywanego w niniejszym rozdziale systemu można wyróżnić następujące perspektywy:

• Główny zarządca Salonu Samochodowego - będzie on posiadał dostęp i prawo do


modyfikacji wszystkich danych w bazie
• Klient- dostęp do informacji dotyczących zakupu samochodu
• Pracownik-dostęp do informacji dotyczących danych osobowych, oraz informacji
związanych ze specjalizacją

3. Model konceptualny
3.1 Definicja zbiorów encji określonych w projekcie (decyzje projektowe)
W projekcie na poziomie konceptualnym wyróżniamy następujące encje:

• Salon_samochodowy - główna encja, która zawiera informacje ogólne na temat


salonu samochodowego,
• Pracownik – encja, która zawiera informacje ogólne na temat pracownika salonu
samochodowego,
• Sprzedawca – encja uszczegóławiająca pracownika salonu samochodowego jako
sprzedawcę,
• Serwisant – encja uszczegóławiająca pracownika salonu samochodowego jako
serwisanta,
• Samochód - encja, która zawiera informacje ogólne na temat samochodów w salonie
samochodowym,
• Samochód_osobowy – encja uszczegóławiająca samochód jako samochód osobowy,
4
• Samochód_dostawczy – encja uszczegóławiająca samochód jako samochód
dostawczy,
• Klient – encja, która zawiera informacje ogólne na temat klienta salonu
samochodowego,
• Osoba_prywatna – encja uszczegóławiająca klienta jako osobę prywatną,
• Firma – encja uszczegóławiająca klienta jako firmę,
• Warsztat – encja zawierająca informacje ogólne na temat warsztatu salonu
samochodowego

3.2 Ustalenie związków między encjami i ich typów


Nazwa relacji Krotność Typ uczestnictwa Opis
Salon_samochodowy - Jeden do wielu Salon samochodowy Salon samochodowy
Klient jest obowiązkowy może obsługiwać
dla klienta; klient wielu klientów, ale
jest opcjonalny dla może nie obsługiwać
salonu żadnego klienta. Za to
samochodowego klient, aby być
klientem, musi
odwiedzić
przynajmniej jeden
salon samochodowy.
Salon_samochodowy - Jeden do wielu Salon samochodowy Salon samochodowy
Pracownik jest obowiązkowy może zatrudniać
dla pracownika; wielu pracowników,
pracownik jest ale może nie
opcjonalny dla zatrudniać żadnego
salonu pracownika. Za to
samochodowego pracownik, aby być
pracownikiem, musi
pracować w jednym
salonie
samochodowym.
Salon_samochodowy - Jeden do wielu Salon samochodowy Salon samochodowy
Warsztat jest obowiązkowy może posiadać wiele
dla warsztatu; warsztatów, ale może
warsztat jest też nie posiadać
opcjonalny dla żadnego. Warsztat
warsztatu aby istniał musi być w
samochodowego. jednym salonie
samochodowym.
Salon samochodowy - Jeden do wielu Salon samochodowy Salon samochodowy
Samochód jest obowiązkowy może posiadać wiele

5
dla samochodu; samochodów a może
samochód jest nie posiadać żadnego.
opcjonalny dla Za to samochód aby
salonu był samochodem
samochodowego. musi istnieć w salonie
samochodowym.
Warsztat - Pracownik Jeden do wielu Warsztat jest Warsztat może
opcjonalny dla posiadać wielu
pracownika; pracowników, ale
pracownik jest może też nie posiadać
opcjonalny dla żadnego. Za to
warsztatu pracownik nie musi
pracować w w
warsztacie, ponieważ
może pracować na
innym stanowisku.
Klient - samochód Wiele do wielu Klient jest Klient może zamówić
opcjonalny dla wiele samochodów a
samochodu; może nie zamówić
samochód jest żadnego. Za to
opcjonalny dla samochód może być
klienta. zamówiony przez
wielu klientów a
może nie być
zamówiony przez
nikogo.
Pracownik-samochód Wiele do wielu Pracownik jest Pracownik może
opcjonalny dla sprzedać wiele
samochodu; samochodów a może
pracownik jest nie sprzedać żadnego.
opcjonalny dla Za to samochód może
klienta. być sprzedany przez
wielu pracowników a
może nie być
sprzadny przez
nikogo.

6
3.3 Określenie atrybutów i ich dziedzin

Salon_samochodowy
Atrybut Typ i dziedzina Obowiązkowość Opis
ID_salonu Integer Obowiązkowy Unikatowy identyfikator salonu
samochodowego
Nazwa VarChar(20) Obowiązkowy Nazwa salonu samochodowego
Adres VarChar(200) Obowiązkowy Adres salonu samochodowego.
Pole segmentowe, które
zawiera kraj, miasto, ulicę,
numer budynku,
numer lokalu i kod pocztowy
Numer_telefonu VarChar(15) Obowiązkowy Numer telefonu salonu
samochodowego
Data_zalozenia Date Obowiązkowy Data założenia salonu
samochodowego
Email VarChar(30) Obowiązkowy Adres email salonu
samochodowego

Pracownik
Atrybut Typ i dziedzina Obowiązkowość Opis
ID_pracownika Integer Obowiązkowy Unikatowy identyfikator
pracownika
Imie VarChar(20) Obowiązkowy Imie pracownika
Drugie_imie VarChar(20) Nieobowiązkowy Drugie imie pracownika
Nazwisko VarChar(40) Obowiązkowy Nazwisko pracownika
Data_urodzenia Date Obowiązkowy Data urodzenia pracownika
Plec Plec Obowiązkowy Plec pracownika
Adres VarChar(200) Obowiązkowy Adres pracownika. Pole
segmentowe, które
zawiera kraj, miasto, ulicę,
numer budynku,
numer lokalu i kod pocztowy
Email VarChar(30) Obowiązkowy Adres email pracownika
PESEL Character(11) Nieobowiązkowy Numer pesel pracownika
Data_zatrudnienia Date Obowiązkowy Data zatrudnienia pracownika

7
Sprzedawca
Atrybut Typ i dziedzina Obowiązkowość Opis
Nr_Stanowiska Integer Obowiązkowy Numer stanowiska sprzedawcy
Jezyk VarChar(50) Obowiązkowy Znajomość języka obcego
sprzedawcy.
Pole segmentowe, które
zawiera język obcy
oraz stopień jego znajomości

Serwisant
Atrybut Typ i dziedzina Obowiązkowość Opis
Nr_legitymacji VarChar(6) Obowiązkowy Numer legitymacji serwisanta
Lata_doswiadczenia Decimal(2, 1) Obowiązkowy Liczba przepracowanych lat
serwisanta

Warsztat
Atrybut Typ i dziedzina Obowiązkowość Opis
ID_warsztatu Integer Obowiązkowy Unikatowy identyfikator
warsztatu
Powierzchnia VarChar(10) Obowiązkowy Powierzchnia warsztatu
Adres VarChar(200) Obowiązkowy Adres warsztatu. Pole
segmentowe, które zawiera
kraj, miasto, ulicę, numer
budynku, numer
lokalu i kod pocztowy

Samochod
Atrybut Typ i dziedzina Obowiązkowość Opis
ID_samochodu Integer Obowiązkowy Unikatowy identyfikator
samochodu
Marka VarChar(30) Obowiązkowy Marka samochodu
Model VarChar(30) Obowiązkowy Model samochodu
Data_produkcji Date Obowiązkowy Data produkcji samochodu
Nr_VIN VarChar(23) Obowiązkowy Numer VIN samochodu
Pojemnosc_silnika Float(1) Obowiązkowy Pojemnosc silnika samochodu

Samochod_dostawczy
Atrybut Typ i dziedzina Obowiązkowość Opis

Ladownosc VarChar(10) Obowiązkowy Ladownosc samochodu


dostawczego
Maksymalna_masa Integer Obowiązkowy Masymalna masa calkowita
_calkowita samochodu dostawczego

8
Samochod_osobowy
Atrybut Typ i dziedzina Obowiązkowość Opis
Liczba_miejsc SmallInt Obowiązkowy Liczba miejsc samochodu
osobowego
Wyposażenie VarChar(400) Obowiązkowy Wyposażenie samochodu
osobowego

Klient
Atrybut Typ i dziedzina Obowiązkowość Opis
ID_klienta Integer Obowiązkowy Unikatowy identyfikator klietna

Numer_telefonu VarChar(15) Obowiązkowy Numer telefonu klietna


Adres VarChar(200) Obowiązkowy Adres klietna. Pole
segmentowe, które zawiera
kraj, miasto, ulicę, numer
budynku, numer
lokalu i kod pocztowy

Email VarChar(50) Obowiązkowy Adres email klienta

Osoba_prywatna
Atrybut Typ i dziedzina Obowiązkowość Opis
Imie VarChar(20) Obowiązkowy Imie osoby prywatnej
Drugie_imie VarChar(20) Nieobowiązkowy Drugie imie osoby prywatnej
Nazwisko VarChar(30) Obowiązkowy Nazwisko osoby prywatnej

Firma
Atrybut Typ i dziedzina Obowiązkowość Opis
Nazwa VarChar(100) Obowiązkowy Nazwa firmy
NiP Character(10) Obowiązkowy Numer NiP firmy

9
3.4 Dodatkowe reguły integralnościowe (reguły biznesowe)
W ramach dodatkowych reguł integralnościowych założonych na potrzeby spójności
projektu, doprecyzowano, że:

• Zakładamy, że salon samochodowy współpracuje z tylko jednym warsztatem.


• Sprzedawca zostać przypisany do warsztatu mimo tego, że oficjalnie nie reprezentuje
specjalizacji “Pracownik_warsztatu”

3.5 Klucze kandydujące i główne (decyzje projektowe)


Nazwa encji Kluch główny Klucz kandydujący
Salon_samochodowy ID_salonu Nazwa, Numer_telefonu, Email
Pracownik ID_pracownika PESEL, Numer_telefonu, Email
Sprzedawca ID_pracownika Nr_stanowiska
Serwisant ID_pracownika Nr_legitymacji
Warsztat ID_warsztatu Nazwa
Samochod ID_samochodu VIN
Samochod_dostawczy ID_samochodu -
Samochod_osobowy ID_samochodu -
Klient ID_klienta Numer_telefonu, Email
Firma ID_klienta NIP
Osoba_prywatna IS_klienta -

10
3.6 Schemat ER na poziomie konceptualnym

11
3.7 Problem pułapek szczelinowych i wachlarzowych – analiza i
przykłady.
Potrzebne do zobrazowania sposobu rozwiązania pułapki szczelinowej encje zostały
przedstawione poniżej:

Salon samochodowy może posiadać warsztaty obsadzone przez serwisantów. Jednak w


kadrze pracowników można wyróżnić także sprzedawców którzy nie powinni mieć nic
wspólnego z warsztatem. Gdyby nie istniała relacja „Zatrudnia” pomiędzy encjami
„Salon_samochodowy” oraz „Pracownik” należałoby zakładać, że wszyscy pracownicy są
przydzieleni do warsztatów. Takie stwierdzenie byłoby oczywiście niezgodne z
rzeczywistością. Rozwiązaniem tej pułapki szczelinowej było zatem utworzenie wspomnianej
wcześniej relacji „Zatrudnia”.
Na tym samym zestawie encji można także zaprezentować rozwiązanie problemu pułapki
wachlarzowej. W sytuacji, gdyby nie istniała relacja „Pracuje” pomiędzy encjami
„Pracownik” oraz „Warsztat”, uzyskanie informacji o tym, który pracownik należy do którego
warsztatu byłoby dosyć problematyczne i przede wszystkim niejednoznaczne – wystąpiłby
wachlarz możliwości. Dzięki relacji „Pracuje” udało się zapobiec wystąpieniu takiej sytuacji.

12
4. Model logiczny
4.1 Charakterystyka modelu logicznego
Po ukończeniu etapu opracowania koncepcyjnego schematu ER i po zweryfikowaniu jego
poprawności, wykorzystując odpowiednie funkcje w programie Toad Data Modeler,
przeprowadziliśmy proces konwersji projektu na poziom logiczny. Przejście na poziom
logiczny skutkuje kilkoma zmianami:

• Relacje “wiele do wielu” zamienione w dwie relacje jeden do wielu z tablicą łącząca
te relacje
• W tabelach pojawił się dodatkowy atrybut w postaci klucza obcego
• Typy danych zostały dostosowane do tych, które są obsługiwane przez
• wybrany przez nas silni
• Identyfikujący atrybut każdej encji stał się kluczem głównym tabel
• Usunęliśmy pola segmentowe - zamiast tego stworzyliśmy oddzielne tabele,
• które połączyliśmy z tabelą, w której uprzednio znajdowało się pole
• Zmieniliśmy nazwy tabel na liczbę mnogą
• Pomiędzy tabelami uszczegóławiającymi a tabelami nadrzędnymi domyślnie stworzone
zostały relacje jeden do wielu z nieobowiązkowym typem uczestnictwa po stronie potomka
oraz obowiązkowym po stronie rodzica.

4.2 Usunięcie właściwości niekompatybilnych z modelem relacyjnym


- przykłady
• Usunięcie pól wielowartościowych
Utworzyliśmy dodatkową tabele Adresy w celu pozbycia się pól wielowartościowych.

• Usunięcie związków wiele do wielu


Związki wiele do wielu zostały zamienione w dwie relacje jeden do wielu z tablicą
łącząca te relacje. Zastosowaliśmy to pomiędzy encjami: Samochody-Pracownicy,
Samochody-Klienci.

13
4.3 Proces normalizacji – analiza i przykłady
Optymalne działanie bazy danych wymaga, aby była ona zorganizowana w sposób
dostosowany do potrzeb silnika bazy danych. Aby osiągnąć tę pożądaną strukturę, stosuje
się proces normalizacji. Postaci normalne stanowią kryteria oceniające stopień, w jakim
struktura bazy danych odzwierciedla tę optymalną formę. Dążymy do osiągnięcia trzeciej
formy normalnej. Normalizacja bazy danych dąży do usunięcia zduplikowanych danych,
centralizując je. To podejście zwiększa bezpieczeństwo przechowywanych informacji i
usprawnia proces aktualizacji danych, przyczyniając się do ich szybszej i bardziej efektywnej
edycji.

• Pierwsza Postać Normalna


Kryterium pierwszej postaci normalnej zakłada, że atrybuty w tabelach nie są
segmentowe oraz nie powtarzają się. W naszym przypadku, atrybutem który
nie pozwalał spełnić kryterium był Adres, znajdujący się w tabelach salon
samochodowy, klient, pracownik, warsztat. Stworzyliśmy więc nową
tabelę Adresy i połączyliśmy ją z uprzednio wymienionymi tabelami.

• Druga Postać Normalna


Kryterium drugiej postaci normalnej zakłada, że wszystkie atrybuty w tabeli
nie będące kluczami są w pełni funkcyjnie zależne od wszystkich innych
kluczy w relacji. Ponadto, klucze powinny być proste. W naszej bazie danych
zastosowaliśmy identyfikację krotek za pomocą dedykowanego ID, które
samo w sobie nie wnosi żadnej informacji. W ten sposób upewniliśmy się, że
druga postać normalna zawsze będzie spełniona.

• Trzecia Postać Normalna


Kryterium trzeciej postaci normalnej zakłada, że żaden atrybut niekluczowy
nie jest zależny funkcyjnie od innych atrybutów niekluczowych. W przypadku
naszej bazy, staranne projektowanie na poziomie konceptualnym
spowodowało, że trzecia postać normalna została w naszej bazie osiągnięta
automatycznie.

14
4.4 Schemat ER na poziomie modelu logicznego

4.5 Więzy integralności


Aby zachować spójność danych, istotne jest dokładne zdefiniowanie reguł integralności. W
tym kontekście, upewniliśmy się, że każdy atrybut składa się z pojedynczej, niepodzielnej
wartości, a każdy klucz główny jest unikatowy. W przypadku atrybutów, rzadko
dopuszczamy możliwość przyjęcia wartości NULL.

4.6 Proces denormalizacji – analiza i przykłady


Poprawnie zaprojektowane bazy danych cechuje zwykle osiągnięcie trzeciej postaci
normalnej. Niemniej jednak, zastosowanie denormalizacji skutkuje powtórzeniem danych i
może prowadzić do utraty spójności, ale zapewnia zwykle szybsze przeszukiwanie danych.
Przeważnie denormalizacja stosowana jest w celu ułatwienia dostępu do często
wykorzystywanych informacji.

15
Możliwe Zastosowania Denormalizacji
Proces denormalizacji jest procesem odwrotnym do normalizacji, którego przeprowadzenie
służy przyspieszeniu dostępu do pewnych danych oraz zwiększeniu wydajności kosztem
sprawności aktualizacji poprzez wprowadzenie kontrolowanej redundancji w ramach
złagodzenia pewnych reguł normalizacji. Do opisania pierwszego przykładu, w którym
możliwe było przeprowadzenie procesu celowej denormalizacji, warto wspomóc się
rysunkiem relacji potrzebnych do tej czynności:

Dokonanie w tym przypadku procesu denormalizacji poprzez usunięcie tabeli „Adresy” i


wprowadzenie każdego atrybutu osobno do każdej pozostałej tabeli doprowadziłoby do
wysokiej redundancji danych z racji na aż trzy połączenia tej tabeli odpowiednio z tabelami
„Salon_samochodowy”, „Pracownicy” oraz „Klienci”. Przechowywanie adresów jest dość
istotnym zagadnieniem, który powinien być rozważony na etapie projektowania
jakiejkolwiek bazy danych reprezentującej pewne przedsiębiorstwo z sektora usług. Zatem –
mimo chęci przyspieszenia dostępu do tych informacji – ryzyko powtarzania danych i
marnowania przestrzeni dyskowej na przechowywanie tych samych pól w wielu miejscach
powinno skutecznie odwieść od zamiaru przeprowadzenia denormalizacji.

16
5. Faza fizyczna
5.1 Projekt transakcji i weryfikacja ich wykonalności
Transakcja Weryfikacja Potrzebne dane
wykonalności
Podgląd informacji o salonie Wykonalne Salon_samochodowy, Adres
samochodowym
Dodawanie/modyfikowanie/usuwanie Wykonalne Salon_samochodowy, Adres
informacji o salonie samochodowym
Podgląd informacji o warsztatach Wykonalne Warsztat,adres
Dodawanie/modyfikowanie/usuwanie Wykonalne Warszat,adres
informacji o warsztatach
Podgląd informacji o samochodach Wykonalne Samochody
Dodawanie/modyfikowanie/usuwanie Wykonalne Samochody
informacji o samochodach
Podgląd informacji o samochodach Wykonalne Samochody,samochody
dostawczych _dostawcze
Dodawanie/modyfikowanie/usuwanie Wykonalne Samochody,samochody
informacji o samochodach dostawczych _dostawcze
Podgląd informacji o samochodach Wykonalne Samochody,Samochody
osobowych _osobowe
Dodawanie/modyfikowanie/usuwanie Wykonalne Samochody,Samochody
informacji o samochodach osobowych _osobowe
Podgląd informacji o pracownikach Wykonalne Pracownicy,adresy
Dodawanie/modyfikowanie/usuwanie Wykonalne Pracownicy,adresy
informacji o pracownikach
Podgląd informacji o salonie Wykonalne Pracownicy,adresy,sprz
pracownikach jako sprzedawcy edawcy
Dodawanie/modyfikowanie/usuwanie Wykonalne Pracownicy,adresy,sprz
informacji o pracownikach jako edawcy
sprzedawcy
Podgląd informacji o salonie Wykonalne Pracownicy,adresy,serw
pracownikach jako serwisanci isanci

Dodawanie/modyfikowanie/usuwanie Wykonalne Pracownicy,adresy,serw


informacji o pracownikach jako isanci
serwisanci
Podgląd informacji o znajomości Wykonalne Sprzedawcy
języków obcych przez sprzedawców

17
Dodawanie/modyfikowanie/usuwanie Wykonalne Sprzedawcy
informacji o znajomości języków
obcych przez sprzedawców
Podgląd informacji o klientach Wykonalne Klienci,adresy
Dodawanie/modyfikowanie/usuwanie Wykonalne Klienci,adresy
informacji o klientach
Podgląd informacji o klientach jako Wykonalne Klienci,adresy,Firmy
firmy
Dodawanie/modyfikowanie/usuwanie Wykonalne Klienci,adresy,Firmy
informacji o klientach jako firmy
Podgląd informacji o klientach jako Wykonalne Klienci,adresy,osoby
osoby prywatne prywatne
Dodawanie/modyfikowanie/usuwanie Wykonalne Klienci,adresy,osoby
informacji o klientach jako osoby prywatne
prywatne
Podgląd informacji o samochodach Wykonalne Samochody,Pracownik,S
sprzedawanych przez pracowników przedaje
Dodawanie/modyfikowanie/usuwanie Wykonalne Samochody,Pracownik,S
informacji o samochodach przedaje
sprzedawanych przez pracowników
Podgląd informacji o samochodach Wykonalne Samochody,Klient,Zama
zamawianych przez klientów wia
Dodawanie/modyfikowanie/usuwanie Wykonalne Samochody,Klient,Zama
informacji o samochodach wia
zamawianych przez klientów

5.2 Strojenie bazy danych – dobór indeksów


W opisywanym projekcie do strojenia bazy danych służyć będą indeksy wygenerowane
automatycznie przy okazji tworzenia relacji między tabelami:

• IX_adres_salonu – wyszukiwanie adresu salonów


• IX_odwiedzony_salon – wyszukiwanie odwiedzonych salonów
• IX_adres_klienta – wyszukiwanie adresu klientów
• IX_salon_pracownika – wyszukiwanie salonu pracowników
• IX_warsztat_pracownika – wyszukiwanie warsztatu pracowników
• IX_adres_pracownika – wyszukiwanie adresu pracowników
• IX_samochod_salonu – wyszukiwanie samochodów salonu
• IX_warsztat_salonu – wyszukiwanie warsztatów salonu

18
5.3 Skrypt SQL zakładający bazę danych
-- Create sequences section -------------------------------------------------

CREATE SEQUENCE "SalonySamochodoweS"

INCREMENT BY 1

START WITH 1

NOMAXVALUE

NOMINVALUE

CACHE 20

CREATE SEQUENCE "KlienciS"

INCREMENT BY 1

START WITH 1

NOMAXVALUE

NOMINVALUE

CACHE 20

CREATE SEQUENCE "AdresyS"

INCREMENT BY 1

START WITH 1

NOMAXVALUE

NOMINVALUE

CACHE 20

CREATE SEQUENCE "JezykiObceS"

INCREMENT BY 1

START WITH 1

NOMAXVALUE

NOMINVALUE

CACHE 20

CREATE SEQUENCE "PracownicyS"

19
INCREMENT BY 1

START WITH 1

NOMAXVALUE

NOMINVALUE

CACHE 20

CREATE SEQUENCE "SamochodyS"

INCREMENT BY 1

START WITH 1

NOMAXVALUE

NOMINVALUE

CACHE 20

CREATE SEQUENCE "WarsztatyS"

INCREMENT BY 1

START WITH 1

NOMAXVALUE

NOMINVALUE

CACHE 20

-- Create tables section -------------------------------------------------

-- Table Salon_samochodowy

CREATE TABLE "Salon_samochodowy"(

"ID_salonu" Integer NOT NULL,

"Nazwa" Varchar2(50 ) NOT NULL,

"Numer_telefonu" Varchar2(15 ) NOT NULL,

"Data_zalozenia" Date NOT NULL,

"Email" Varchar2(30 ) NOT NULL,

"ID_adresu" Integer NOT NULL

-- Create indexes for table Salon_samochodowy

20
CREATE INDEX "IX_adres_salonu" ON "Salon_samochodowy" ("ID_adresu")

-- Add keys for table Salon_samochodowy

ALTER TABLE "Salon_samochodowy" ADD CONSTRAINT "SalonPK" PRIMARY KEY ("ID_salonu")

-- Table and Columns comments section

COMMENT ON TABLE "Salon_samochodowy" IS 'Relacja salon samochodowy'

COMMENT ON COLUMN "Salon_samochodowy"."ID_salonu" IS 'Unikatowy identyfikator salonu


samochodowego'

COMMENT ON COLUMN "Salon_samochodowy"."Nazwa" IS 'Nazwa salonu samochodowego'

COMMENT ON COLUMN "Salon_samochodowy"."Numer_telefonu" IS 'Numer telefonu salonu


samochodowego'

COMMENT ON COLUMN "Salon_samochodowy"."Data_zalozenia" IS 'Data założenia salonu samochodowego'

COMMENT ON COLUMN "Salon_samochodowy"."Email" IS 'Email salonu samochodowego'

-- Table Pracownicy

CREATE TABLE "Pracownicy"(

"ID_pracownika" Integer NOT NULL,

"Imie" Varchar2(20 ) NOT NULL,

"Drugie_imie" Varchar2(20 ),

"Nazwisko" Varchar2(40 ) NOT NULL,

"Data_urodzenia" Date NOT NULL,

"Plec" Char(1 ) NOT NULL,

CONSTRAINT PlecR CHECK (Plec In ('K','M')),

"Email" Varchar2(30 ) NOT NULL,

"PESEL" Char(11 ),

"Data_zatrudnienia" Date NOT NULL,

21
"ID_salonu" Integer NOT NULL,

"ID_warsztatu" Integer NOT NULL,

"ID_adresu" Integer NOT NULL

-- Create indexes for table Pracownicy

CREATE INDEX "IX_salon_pracownika" ON "Pracownicy" ("ID_salonu")

CREATE INDEX "IX_warsztat_pracownika" ON "Pracownicy" ("ID_warsztatu")

CREATE INDEX "IX_adres_pracownika" ON "Pracownicy" ("ID_adresu")

-- Add keys for table Pracownicy

ALTER TABLE "Pracownicy" ADD CONSTRAINT "PracownikPK" PRIMARY KEY ("ID_pracownika")

-- Table and Columns comments section

COMMENT ON TABLE "Pracownicy" IS 'Relacja pracownicy'

COMMENT ON COLUMN "Pracownicy"."ID_pracownika" IS 'Unikatowy identyfikator pracownika'

COMMENT ON COLUMN "Pracownicy"."Imie" IS 'Imie pracownika'

COMMENT ON COLUMN "Pracownicy"."Drugie_imie" IS 'Drugie imie pracownika'

COMMENT ON COLUMN "Pracownicy"."Nazwisko" IS 'Nazwisko pracownika'

COMMENT ON COLUMN "Pracownicy"."Data_urodzenia" IS 'Data urodzenia pracownika'

COMMENT ON COLUMN "Pracownicy"."Plec" IS 'Płeć pracownika'

COMMENT ON COLUMN "Pracownicy"."Email" IS 'Email pracownika'

22
/

COMMENT ON COLUMN "Pracownicy"."PESEL" IS 'Numer pesel pracownika'

COMMENT ON COLUMN "Pracownicy"."Data_zatrudnienia" IS 'Data zatrudnienia pracownika'

-- Table Klienci

CREATE TABLE "Klienci"(

"ID_klienta" Integer NOT NULL,

"Numer_telefonu" Varchar2(15 ) NOT NULL,

"Email" Varchar2(50 ) NOT NULL,

"ID_salonu" Integer NOT NULL,

"ID_adresu" Integer NOT NULL

-- Create indexes for table Klienci

CREATE INDEX "IX_odwiedzony_salon" ON "Klienci" ("ID_salonu")

CREATE INDEX "IX_adres_klienta" ON "Klienci" ("ID_adresu")

-- Add keys for table Klienci

ALTER TABLE "Klienci" ADD CONSTRAINT "KlientPK" PRIMARY KEY ("ID_klienta")

-- Table and Columns comments section

COMMENT ON TABLE "Klienci" IS 'Relacja klienci'

COMMENT ON COLUMN "Klienci"."ID_klienta" IS 'Unikatowy identyfikator klienta'

COMMENT ON COLUMN "Klienci"."Numer_telefonu" IS 'Numer telefonu klienta'

COMMENT ON COLUMN "Klienci"."Email" IS 'Email klienta'

-- Table Firmy

23
CREATE TABLE "Firmy"(

"Nazwa" Varchar2(100 ) NOT NULL,

"NIP" Char(10 ) NOT NULL,

"ID_klienta" Integer NOT NULL

-- Add keys for table Firmy

ALTER TABLE "Firmy" ADD CONSTRAINT "Unique_Identifier5" PRIMARY KEY ("ID_klienta")

-- Table and Columns comments section

COMMENT ON TABLE "Firmy" IS 'Relacja firmy'

COMMENT ON COLUMN "Firmy"."Nazwa" IS 'Nazwa firmy'

COMMENT ON COLUMN "Firmy"."NIP" IS 'Numer NIP firmy'

-- Table Osoby_prywatne

CREATE TABLE "Osoby_prywatne"(

"Imie" Varchar2(20 ) NOT NULL,

"Drugie_imie" Varchar2(20 ),

"Nazwisko" Varchar2(30 ) NOT NULL,

"ID_klienta" Integer NOT NULL

-- Add keys for table Osoby_prywatne

ALTER TABLE "Osoby_prywatne" ADD CONSTRAINT "Unique_Identifier6" PRIMARY KEY ("ID_klienta")

-- Table and Columns comments section

COMMENT ON TABLE "Osoby_prywatne" IS 'Relacja osoby prywatne'

COMMENT ON COLUMN "Osoby_prywatne"."Imie" IS 'Imie klienta jako osoby prywatnej'

24
/

COMMENT ON COLUMN "Osoby_prywatne"."Drugie_imie" IS 'Drugie imie klienta jako osoby prywatnej'

COMMENT ON COLUMN "Osoby_prywatne"."Nazwisko" IS 'Nazwisko klienta jako osoby prywatnej'

-- Table Sprzedawcy

CREATE TABLE "Sprzedawcy"(

"Nr_stanowiska" Integer NOT NULL,

"ID_pracownika" Integer NOT NULL

-- Add keys for table Sprzedawcy

ALTER TABLE "Sprzedawcy" ADD CONSTRAINT "Unique_Identifier7" PRIMARY KEY ("ID_pracownika")

-- Table and Columns comments section

COMMENT ON TABLE "Sprzedawcy" IS 'Relacja sprzedawcy'

COMMENT ON COLUMN "Sprzedawcy"."Nr_stanowiska" IS 'Numer stanowiska sprzedawcy'

-- Table Serwisanci

CREATE TABLE "Serwisanci"(

"Numer_legitymacji" Varchar2(6 ) NOT NULL,

"Lata_doświadczenia" Number(2,1) NOT NULL,

"ID_pracownika" Integer NOT NULL

-- Add keys for table Serwisanci

ALTER TABLE "Serwisanci" ADD CONSTRAINT "Unique_Identifier8" PRIMARY KEY ("ID_pracownika")

-- Table and Columns comments section

COMMENT ON TABLE "Serwisanci" IS 'Relacja serwisanci'

25
/

COMMENT ON COLUMN "Serwisanci"."Numer_legitymacji" IS 'Numer legitymacji serwisanta'

COMMENT ON COLUMN "Serwisanci"."Lata_doświadczenia" IS 'Lata doświadczenia serwisanta'

-- Table Samochody

CREATE TABLE "Samochody"(

"ID_samochodu" Integer NOT NULL,

"Marka" Varchar2(30 ) NOT NULL,

"Model" Varchar2(30 ) NOT NULL,

"Data_produkcji" Date NOT NULL,

"Nr_VIN" Varchar2(23 ) NOT NULL,

"Pojemnosc_silnika" Float(1) NOT NULL,

"ID_salonu" Integer NOT NULL

-- Create indexes for table Samochody

CREATE INDEX "IX_samochod_salonu" ON "Samochody" ("ID_salonu")

-- Add keys for table Samochody

ALTER TABLE "Samochody" ADD CONSTRAINT "SamochodPK" PRIMARY KEY ("ID_samochodu")

-- Table and Columns comments section

COMMENT ON TABLE "Samochody" IS 'Relacja samochody'

COMMENT ON COLUMN "Samochody"."ID_samochodu" IS 'Unikatowy identyfikator samochodu'

COMMENT ON COLUMN "Samochody"."Marka" IS 'Marka samochodu'

COMMENT ON COLUMN "Samochody"."Model" IS 'Model samochodu'

COMMENT ON COLUMN "Samochody"."Data_produkcji" IS 'Data produkcji samochodu'

26
/

COMMENT ON COLUMN "Samochody"."Nr_VIN" IS 'Numer VIN samochodu'

COMMENT ON COLUMN "Samochody"."Pojemnosc_silnika" IS 'Pojemność silnika samochodu'

-- Table Warsztaty

CREATE TABLE "Warsztaty"(

"ID_warsztatu" Integer NOT NULL,

"Powierzchnia" Varchar2(10 ) NOT NULL,

"ID_salonu" Integer NOT NULL

-- Create indexes for table Warsztaty

CREATE INDEX "IX_warsztat_salonu" ON "Warsztaty" ("ID_salonu")

-- Add keys for table Warsztaty

ALTER TABLE "Warsztaty" ADD CONSTRAINT "WarsztatPK" PRIMARY KEY ("ID_warsztatu")

-- Table and Columns comments section

COMMENT ON TABLE "Warsztaty" IS 'Relacja warsztaty'

COMMENT ON COLUMN "Warsztaty"."ID_warsztatu" IS 'Unikatowy identyfikator warsztatu'

COMMENT ON COLUMN "Warsztaty"."Powierzchnia" IS 'Powierzchnia warsztatu'

-- Table Samochody_osobowe

CREATE TABLE "Samochody_osobowe"(

"Liczba_miejsc" Integer NOT NULL,

"Wyposazenie" Varchar2(400 ) NOT NULL,

"ID_samochodu" Integer NOT NULL

27
-- Add keys for table Samochody_osobowe

ALTER TABLE "Samochody_osobowe" ADD CONSTRAINT "Unique_Identifier12" PRIMARY KEY


("ID_samochodu")

-- Table and Columns comments section

COMMENT ON TABLE "Samochody_osobowe" IS 'Relacja samochody osobowe'

COMMENT ON COLUMN "Samochody_osobowe"."Liczba_miejsc" IS 'Liczba miejsc samochodu osobowego'

COMMENT ON COLUMN "Samochody_osobowe"."Wyposazenie" IS 'Wyposarzenie samochodu osobowego'

-- Table Samochody_dostawcze

CREATE TABLE "Samochody_dostawcze"(

"Ladownosc" Varchar2(10 ) NOT NULL,

"Maksymalna_masa_calkowita" Integer NOT NULL,

"ID_samochodu" Integer NOT NULL

-- Add keys for table Samochody_dostawcze

ALTER TABLE "Samochody_dostawcze" ADD CONSTRAINT "Unique_Identifier13" PRIMARY KEY


("ID_samochodu")

-- Table and Columns comments section

COMMENT ON TABLE "Samochody_dostawcze" IS 'Relacja samochody dostawcze'

COMMENT ON COLUMN "Samochody_dostawcze"."Ladownosc" IS 'Ładowność samochodu dostawczego'

COMMENT ON COLUMN "Samochody_dostawcze"."Maksymalna_masa_calkowita" IS 'Maksymalna masa


całkowita samochodu dostawczego'

-- Table Zamawia

CREATE TABLE "Zamawia"(

"ID_klienta" Integer NOT NULL,

28
"ID_samochodu" Integer NOT NULL

-- Table Sprzedaje

CREATE TABLE "Sprzedaje"(

"ID_pracownika" Integer NOT NULL,

"ID_samochodu" Integer NOT NULL

-- Table Adresy

CREATE TABLE "Adresy"(

"ID_adresu" Integer NOT NULL,

"Kraj" Varchar2(30 ) NOT NULL,

"Miasto" Varchar2(30 ) NOT NULL,

"Ulica" Varchar2(30 ) NOT NULL,

"Numer_domu" Varchar2(4 ) NOT NULL,

"Kod_pocztowy" Char(6 ) NOT NULL

-- Add keys for table Adresy

ALTER TABLE "Adresy" ADD CONSTRAINT "PK_Adresy" PRIMARY KEY ("ID_adresu")

-- Table and Columns comments section

COMMENT ON TABLE "Adresy" IS 'Relacja adresy'

COMMENT ON COLUMN "Adresy"."ID_adresu" IS 'Unikalny identyfikator adresu'

COMMENT ON COLUMN "Adresy"."Kraj" IS 'Kraj adresu'

COMMENT ON COLUMN "Adresy"."Miasto" IS 'Miasto adresu'

29
/

COMMENT ON COLUMN "Adresy"."Ulica" IS 'Ulica adresu'

COMMENT ON COLUMN "Adresy"."Numer_domu" IS 'Numer domu adresu'

COMMENT ON COLUMN "Adresy"."Kod_pocztowy" IS 'Kod pocztowy adresu'

-- Table Znajomosc_jezykow_obcych

CREATE TABLE "Znajomosc_jezykow_obcych"(

"Stopien_znajomosci" Char(1 ) NOT NULL,

"ID_jezyka" Integer NOT NULL,

"ID_pracownika" Integer NOT NULL

-- Add keys for table Znajomosc_jezykow_obcych

ALTER TABLE "Znajomosc_jezykow_obcych" ADD CONSTRAINT "PK_Znajomosc_jezykow_obcych" PRIMARY


KEY ("ID_jezyka","ID_pracownika")

-- Table and Columns comments section

COMMENT ON TABLE "Znajomosc_jezykow_obcych" IS 'Relacja znajomosc jezyków obcych'

COMMENT ON COLUMN "Znajomosc_jezykow_obcych"."Stopien_znajomosci" IS 'Stopień znajomości języka


przez sprzedawce'

-- Table Jezyki_obce

CREATE TABLE "Jezyki_obce"(

"ID_jezyka" Integer NOT NULL,

"Nazwa" Varchar2(20 ) NOT NULL

-- Add keys for table Jezyki_obce

30
ALTER TABLE "Jezyki_obce" ADD CONSTRAINT "PK_Jezyki_obce" PRIMARY KEY ("ID_jezyka")

-- Table and Columns comments section

COMMENT ON COLUMN "Jezyki_obce"."ID_jezyka" IS 'Unikatowy identyfikator języka'

COMMENT ON COLUMN "Jezyki_obce"."Nazwa" IS 'Znany język'

-- Create foreign keys (relationships) section -------------------------------------------------

ALTER TABLE "Samochody" ADD CONSTRAINT "Oferuje" FOREIGN KEY ("ID_salonu") REFERENCES
"Salon_samochodowy" ("ID_salonu")

ALTER TABLE "Pracownicy" ADD CONSTRAINT "Salon_samochodowy_zatrudnia_pracownika" FOREIGN KEY


("ID_salonu") REFERENCES "Salon_samochodowy" ("ID_salonu")

ALTER TABLE "Warsztaty" ADD CONSTRAINT "Salon_samochodowy_posiada_warsztat" FOREIGN KEY


("ID_salonu") REFERENCES "Salon_samochodowy" ("ID_salonu")

ALTER TABLE "Salon_samochodowy" ADD CONSTRAINT "Salon_samochodowy_ma_adres" FOREIGN KEY


("ID_adresu") REFERENCES "Adresy" ("ID_adresu")

ALTER TABLE "Klienci" ADD CONSTRAINT "Klient_ma_adres" FOREIGN KEY ("ID_adresu") REFERENCES "Adresy"
("ID_adresu")

ALTER TABLE "Pracownicy" ADD CONSTRAINT "Pracownik_ma_adres" FOREIGN KEY ("ID_adresu") REFERENCES
"Adresy" ("ID_adresu")

ALTER TABLE "Pracownicy" ADD CONSTRAINT "Warsztat_jest_obsadzany" FOREIGN KEY ("ID_warsztatu")


REFERENCES "Warsztaty" ("ID_warsztatu")

ALTER TABLE "Znajomosc_jezykow_obcych" ADD CONSTRAINT "Jezyk_jest_znany" FOREIGN KEY ("ID_jezyka")


REFERENCES "Jezyki_obce" ("ID_jezyka")

ALTER TABLE "Znajomosc_jezykow_obcych" ADD CONSTRAINT "Pracownik_zna_jezyk" FOREIGN KEY


("ID_pracownika") REFERENCES "Sprzedawcy" ("ID_pracownika")

31
ALTER TABLE "Klienci" ADD CONSTRAINT "Obsługuje" FOREIGN KEY ("ID_salonu") REFERENCES
"Salon_samochodowy" ("ID_salonu")

5.4 Przykład zapytań i poleceń SQL odnoszących się do bazy danych


• informacja o długości nazwy najdłuższej ulicy wybranej spośród miast
rozpoczynających się na literę ‘W’,

Bibliografia
Podczas sporządzania dokumentacji za materiały pomocnicze posłużyły nam slajdy
z przedmiotu Bazy Danych i Big Data (BDBT) autorstwa dr hab. inż. Marcina Kowalczyka
(Instytut Telekomunikacji na Wydziale Elektroniki i Technik Informacyjnych Politechniki
Warszawskiej)

32

You might also like