250
Bazy Danych (cz. 1) Normalizacja/Denormalizacja Podstawowe bloki składowe, zasady tworzenia Diagramy ERD Algebra relacyjna Podstawy SQL na przykładzie Oracle

Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Embed Size (px)

Citation preview

Page 1: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Bazy Danych (cz. 1)● Normalizacja/Denormalizacja● Podstawowe bloki składowe, zasady tworzenia● Diagramy ERD● Algebra relacyjna● Podstawy SQL na przykładzie Oracle

Page 2: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Literatura● Oracle Database 10g: SQL Fundamentals II● Książka SQL. Zaawansowane techniki

programowania, Joe Celko● ...

Page 3: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Normalizacja

Page 4: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Postać nieunormowanaid

zamówieniaid

dostawcynazwa

dostawcyadres

dostawcyid

częścinazwa części ilość

0001 M$ USA 0088 System op.

0004 111 Polska 0089 Obudowa 1

456 0001 Karta graficzna 1

Toshiba Japonia Bateria 55

Jak postać nieunormowana może też występować tabela, w której adres jest w pisany w jednym polu (tzn. Razem kod, ulica, miejscowość, numer domu etc.). W przypadku normalizacji te dane powinny zostać rozbite (atomowe, swoiste, niezwiązane o określonym typie) na poszczególne kolumny. W przedstawionym przykładzie pozostawimy tylko adres jako jedną kolumnę ze względu na oszczędność miejsca (nie będziemy też podawać pełnych danych).

Page 5: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Postać nieunormowanaInne przykłady nieunormowanych schematów BD

osoba Ulubione koloryMieczysław beż, róż, żółtyRoman czarny, niebieski

osoba kolor1 kolor2 kolor3Mieczysław beż róż żółtyRoman czarny niebieski NULL

UWAGA: chodzi tu o powtarzające się grupy, teoretycznie tylko przykład pierwszy łamie zasady projektowania (normalizacja), drugi przykład możemy sobie wyobrazić jako zestaw opisujący kolory różnych elementów (z punktu bazy danych kolumny w przykładzie drugim przechowują jedną wartość).Jednak drugi przykład nie jest zalecany jeśli baza ma się rozbudowywać.

Page 6: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

AnomalieNadmiarowość – w przypadku nowego elementu tego samego producenta zostaną zdublowane jego dane: adres, nazwa. Jeśli dane te zostaną błędnie wprowadzone baza danych utraci spójność.

Anomalia wstawiania – Jeśli zajdzie potrzeba dodania nowego producenta ale bez podawania zamówienia. Baza danych stanie się wtedy niepełna (gdy będzie w 1NF to przejdzie do postaci nieunormowanej).

Anomalia modyfikacji – zmiana nazwy dostawcy wymaga zmian we wszystkich wierszach. W przypadku wielu rekordów spowoduje to nadmierne obciążenie systemu.

Anomalia usuwania – Jeśli jest wpisane jedno zamówienie to jego usunięcie spowoduje też usunięcie informacji o dostawcy.

Page 7: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Pierwsza postać normalna (1NF)id

zamówieniaid

dostawcynazwa

dostawcyadres

dostawcyid

częścinazwa części ilość

0001 222 M$ USA 0088 System op. 1

0004 111 Blacharnia Polska 0089 Obudowa 1

0007 456 Nvidia USA 0001 Karta graficzna 1

0010 768 Toshiba Japonia 0002 Bateria 55

Każda komórka reprezentuje wartość atomową (przy czym należy to rozumieć w sensie rzeczywistości opisywanej prze projektanta bo np.. datę można rozbić na dzień, miesiąc i rok co nie ma sensu jeśli potrzebna nam jest pełna data).

Wartości NULL w komórkach: Wielu twierdzi, że łamie to zasady 1NF. Teoretycznie nie jednak zaleca się jak najmniejszą liczebność wartości NULL ze względu, że w SQL jest to trzecia wartość logiczna, którą trzeba specjalnie traktować.

Page 8: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Klucz kandydujący● Minimalny zestaw atrybutów definiujący krotkę

(wiersz)● Relacja (tabela) może zawierać kilka kluczy

kandydujących● Zazwyczaj wybiera się jeden z kluczy

kandydujących (staje się on wtedy kluczem głównym).

● Atrybuty (kolumny) nie występujące w kluczach kandydujących nazywa się atrybutem pobocznym (non-prime), atrybut należący atrybutem głównym (prime).

Page 9: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Druga postać normalna (2NF)

id dostawcy

nazwa dostawcy

adres dostawcy

222 M$ USA

111 Blacharnia Polska

456 Nvidia USA

768 Toshiba Japonia

id zamówienia

id dostawcy

id części

ilość

0001 222 0088 1

0004 111 0089 1

0007 456 0001 1

0010 768 0002 55

id części

nazwa części nazwa producenta

adres producenta

0088 System op. M$ USA

0089 Obudowa Blacharnia Polska

0001 Karta graficzna

ATI USA

0002 Bateria Toshiba Japonia

Relacja jest w drugiej postaci normalnej wtedy i tylko wtedy gdy jest w I postaci normalnej i każda kolumna zależy funkcyjnie od całego klucza kandydującego (głównego)

Poprzednia postać nie była w 2NF gdyż w tabeli wraz z kluczem iddostawcy, idczesci oraz idzamowienia pojawiał się wartość związana tylko z częścią klucza np. Adres dostawcy jest związany tylko i wyłącznie z kluczem iddostawcy

Dostawca nie musi być związany z producentem

Page 10: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Trzecia postać normalna (3NF)Schemat jest w 3NF jeżeli jest w 2NF i pomiędzy atrybutami nie należącymi doklucza głównego nie występują zależności funkcjonalne.

id części id producenta

nazwa części

0088 0088 System op.

0089 0089 Obudowa

0001 0001 Karta graficzna

0002 0002 Bateria

Tabela opisująca części jest w 2NF bo od klucza idczesci zależą pola w tabeliale nie jest w 3NF dlatego, że nazwa dostawcy nie należy do opisu części samochodowej

id producenta

nazwa producenta

adres producenta

0088 M$ USA

0089 Blacharnia Polska

0001 Nvidia USA

0002 Toshiba Japonia

Page 11: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Trzecia postać normalna (3NF)id

zamówieniaid

dostawcyid

częściilość

0001 222 0088 1

0004 111 0089 1

0007 456 0001 1

0010 768 0002 55

id dostawcy

nazwa dostawcy

adres dostawcy

222 M$ USA

111 Blacharnia Polska

456 Nvidia USA

768 Toshiba Japonia

id producenta

nazwa producenta

adres producenta

0088 M$ USA

0089 Blacharnia Polska

0001 Nvidia USA

0002 Toshiba Japonia

id części id producenta

nazwa części

0088 0088 System op.

0089 0089 Obudowa

0001 0001 Karta graficzna

0002 0002 Bateria

Page 12: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Wnioski

Trzecia postać normalna jest wystarczająca do większości zastosowań pozostałe postacie normalne stosuje się gdy wymagana jest większa optymalizacja.

W przedstawionym przykładzie zastosowaliśmy pewnego typu uproszczenie (swoją drogą często stosowane) a mianowicie wprowadziliśmy unikalne oznaczenia (id) dla elementów. Równie dobrze, można by zastosować klucz „nazwa dostawcy” zamiast „id dostawcy”. Można by też zbudować unikalny klucz składający się z większej liczby kolumn.

Page 13: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

RozbudowaRozbudujmy poprzedni przykład pomijając klucze (id) i wprowadzając kupującego.Kolumny pokolorowane będą teraz oznaczały unikalne klucze dla tabeli.Wyjaśni nam to dlaczego tak zrobiliśmy (po części intuicyjnie) w poprzednim przykładzie.

nazwa dostawcy

adres dostawcy

M$ USA

Blacharnia Polska

Nvidia USA

Toshiba Japonia

nazwa dostawcy

nazwa części Ilość w magazynie

M$ System op. 11

Blacharnia Obudowa 24

Nvidia Karta graficzna 111

Toshiba Bateria 876

nazwa kupującego

adres

Kazio Emiraty A

Możliwość zamiennika – ta sama część

Czego jeszcze potrzeba ?

Page 14: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Elementu opisującego transakcję oraz upewnieniu się w której postaci normalnej jesteśmy (3NF).

nazwa dostawcy

nazwa części nazwa kupującego

Data transakcji Ilość

M$ System op. Kazio 2008-01-01 1

W tabeli mamy jednak nadal pewien problem, możemy zarezerwować kilka transakcji w tymSamym czasie dla tego samego kupującego (zakładając hh:mm:ss), co jest nierealne w rzeczywistym świecie.

Page 15: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

UWAGAZakłada się, że w 3NF nie ma zależności przechodnich. Oznacza to, że brak jest sytuacji w której w tabeli z kolumnami X,Y,Z można przedstawić w następujący sposób X->Y, Y->Z z czego wynika X->Z. Jednak dotyczy to całego klucza i jest dopuszczalne występowanie zależności przechodnich gdy X nie jest kluczem.

Do takich zależności zależy też np. kolumna powierzchnia wyliczana na podstawieBoków kwadratu a i b.

Page 16: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Postać normalna klucza elementarnego

EKNF – Elementary Key Normal Form

Metoda ta jest bardzo subtelną modyfikacją 3NF i częściej jest zastępowana przez następną z postaci normalnych.

nazwa dostawc

y

nazwa części id części Ilość w magazynie

M$ System op. A01 11

Blacharnia

Obudowa B02 24

Nvidia Karta graficzna

C03 111

Toshiba Bateria C04 876

nazwa dostawc

y

id części Ilość w magazynie

M$ A01 11

Blacharnia

B02 24

Nvidia C03 111

Toshiba C04 876

id części nazwa części

A01 System op.B02 ObudowaC03 Karta

graficznaC04 Bateria

Page 17: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Postać normalna Boyce-CoddaBCNF – Boyce-Codda Normal Form

W tej postaci normalnej nie ma nietrywialnych (poza X->X) zależności a jedynie pomiędzy atrybutami a kluczem.

Przykład X->Y, Y->Z z opisowego przykładu już nie był by w postaci BCNF

Page 18: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Czwarta postać normalna (4NF)Problem wielowartościowych zależności.MVD - Multivalued Dependencies

Jeśli w jednym zamówieniu będziemy chcieli umieścić więcej elementów powstanie problem. Bo np. Dodając część musimy dodać od razu wydziały, w których zostanie zostanie wykorzystana (czyli więcej niż jeden wiersz).

wydział zadanie częśćA Z1 C1A Z1 C2A Z2 C3C Z3 C1

wydział zadanieA Z1A Z2C Z3

wydział częśćA C1A C2A C3C C1

4NF jest zawsze możliwa do osiągnięcia ale nie zawsze warto/jest potrzebna.

Page 19: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Piąta postać normalna (5NF)Project-join normal form (PJ/NF) - postać połączonej projekcji. Zakłada ona, że istnieją zależności nie tylko między kluczami i opiera się na bezstratnym połączeniu (JOIN).Stosowana gdy mamy problem n-stronny (n>2). Buduje się ją z 3NF przy założeniu, że klucze to pojedyncze kolumny.

kupujący sprzedawca Firma Roman Genowefa SuperRoman Stefania pol-exKazimierz Stefania Super

kupujący Firma Roman SuperRoman pol-exKazimierz Super

sprzedawca Firma Genowefa SuperStefania pol-exStefania Super

kupujący sprzedawcaRoman GenowefaRoman StefaniaKazimierz Stefania

Page 20: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

UWAGAJest to silna zależność w której wykorzystane zostało połączenie JOIN

Można sobie wyobrazić iloczyn kartezjański tych zbiorów (bardziej jasne będzie to przy poznaniu zapytania SELECT) w którym otrzymamy zarówno poprawne wiersze jak i te niepoprawne (anomalia połączenia projekcji).

kupujący sprzedawca firma Roman Genowefa SuperRoman Stefania pol-exRoman Stefania SuperKazimierz Stefania Super

Page 21: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Postać normalna klucza domenyDKNF - Domain Key Normal Form

Wymaga się aby klucz w jednoznaczny sposób identyfikował wiersz aby była spełniona ta zależność (DKNF) powinny być spełnione:

- pole powinno być dobrze zdefiniowane - pole powinno być związane z obiektem który chcemy trzymać w tabeli - każde pole powinno być zależne od klucza - tabela powinna reprezentować jeden temat/rodzaj obiektów

Zatem na pewno odpadają tabele wielowartościowe, relacje przechodnie. Można stwierdzić że tabela powinna być w 5NF.

Niestety forma ta jest trudna do otrzymania w praktyce w dodatku zależy od intuicji ...

Page 22: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

(6NF)

SQL and Relational Theory: How to Write Accurate SQL Code By C. J. Date (Appendix B)

Postać ta powstała w 2002 roku i ma na celu normalizacje danych mogących się zmieniać w czasie/zależeć od czasu.

Może to być np. tabela zawierająca informacje o zatrudnieniu jakiegoś pracownika i informacji od kiedy do kiedy jest on zatrudniony. Pojawia się tu też problem łączenia danych w blokach czasu (przedłużenie ciągłości zatrudnienia).

Obecnie dopiero powstają (brak chyba jeszcze jakiś standardów)Temporal database - Temporalna baza danych

Page 23: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

DenormalizacjaDenormalizacja jest trudnym problemem, występuje tu zjawisko polaryzacji środowiska. Pojawiają się tu osoby silnie przestrzegające zasad normalizacji jak i takie które wręcz używają postaci nieunormowanych. Można by to przyrównać do fanatyków Linux'a lub Windows'a niemających pojęcia jeden o drugim.

Zatem kiedy stosować denormalizację ?

Z pewnością kiedy mamy problemy z wydajnością (długie oczekiwanie na generowanie raportów, wolne ładowanie strony etc.). Czasami denormalizacja potrafi znacznie podnieść taką wydajność, jednak mimo wszystko powinno się najpierw sprawdzić czy nasze zapytania na pewno są dobrze zoptmalizowane, czy indeksy są dobrze założone, czy system nie wymaga ''wyczyszczenia''. Zakłada się nawet (np. SQL... J.Celko), że denormalizacja powinna być przeprowadzana tylko i wyłącznie na hurtowniach danych (w przybliżeniu baza danych do odczytu).

Page 24: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Projektowanie bazy danych

Dodatki z literatury

● Oracle FAQ (http://www.orafaq.com) 2009.10.11

● Data Modeling and Relational Database Design English Student Subscription (20000GC13 Production 1.3 August 2002 D37098 Orcale)

Przykład projektu BD (popularne forum phpBB)

Page 25: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Modelowanie danych● Co będzie przydatne i kiedy: Normalizacja czy

Denormalizacja ? Jak ma się modelowanie do normalizacji ?

● Papier, Ekran, Paint czy specjalistyczne oprogramowanie (ER) ?

Model konceptualny >>>>>>> Model fizyczny

CDM – Conceptual Data ModelPDM – Physical Data Model

Page 26: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Encje, Atrybuty, Relacje

Page 27: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Encje - Entities

Czym jest encja ?

Encja powinna określać co w naszych danych jest istotne, godne przechowywania. Elementy te powinny być dobrze zdefiniowane, tak aby było możliwe ich rozróżnienie. Powinny to być informacje o obiektach takich które można umieścić w liście. Nazwy encji najczęściej przyjmuje się jako rzeczownik w liczbie mnogiej np. użytkownicy, przedmioty.Aczkolwiek są różne zdania. Ja wychodzę z założenia, że:● Należy na 100% stosować tą samą notację w całym projekcie.● Dostosować się do istniejącej notacji, notacji używanej przez grupę do której się dołączyło

UżytkownicyImięPESELData urodzeniaAdresUprawnienia

Encje zazwyczaj można utożsamiać z tabelami.

Page 28: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Encja a instancja Encji

Zbiór instancji encji

UżytkownicyImię RomanPESEL 64062687368Data urodzenia 1964-06-26Adres PoznańUprawnienia Użytkownik

Instancja encji

UWAGA !Bardzo często mówi

się o instancji encji, encja

Page 29: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Atrybuty - Attributes

Poszczególne atrybuty pozwalają na odróżnienie poszczególnych instancji encji.Podczas projektowania encji należy zaznaczyć który z nich jest identyfikatorem.Dopuszcza się też podanie domeny oraz typu atrybutu.Zatem atrybut jest: - własnością jednowartościową opisującą encje - reprezentuje jakiś ważny wycinek logiki - reprezentuje informację którą możemy opisać, klasyfikować, kwalifikować, podać ilość/wielkość oraz jest istotna z punktu widzenia encji.

UżytkownicyImię RomanPESEL 64062687368Data urodzenia 1964-06-26Adres PoznańUprawnienia Użytkownik

Na diagramie często wyświetlenie wszystkich atrybutów mogło by go zaciemnićWyświetla się wtedy tylko najważniejsze informacje (np. Klucze własne, obce)

Page 30: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Relacje - Relations

● Reprezentują fragment opisywanej rzeczywistości

● Opisują wzajemne relacje encji● Zawsze Istnieją pomiędzy dwoma encjami (albo

jednej podwójnie)● Mają dwie perspektywy● Są nazwane na obu końcach

Page 31: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Przykład● Pracownik ma stanowisko● Stanowisko jest utrzymywane przez

pracownika● Produkt jest klasyfikowany wedle typu

produktu● Typ produktu jest jest klasyfikacją dla

produktu● Ludzie robią rezerwacje● Rezerwacją jest robiona przez ludzi

Page 32: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

● Wszyscy pracownicy mają stanowisko ● Nie ma pracownika bez stanowiska● Nie wszystkie stanowiska są obsadzone● Niektóre stanowiska są obsadzone więcej niż jednym

pracownikiem

Page 33: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Perspektywy

Page 34: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 35: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 36: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Czytanie relacji

Page 37: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 38: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Więzy - Constraints

● Unikalny identyfikator (UID - Unique Identifiers)● ARC Relationship

Page 39: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Unikalny identyfikatorJuż pojawiły się takie jak zestaw danych teleadresowych, unikalny numer (EAN, PESEL).Mogą być jeszcze (i wiele wiele innych):

Page 40: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

ARC Relationship

Relacje tego typu opisują relacje pomiędzy relacjami wykluczającymi się np.

Numer konta bankowego może być firmowy albo prywatny, jednak nigdy na raz firmowy i prywatny

XOR 0 10 0 11 1 0

Page 41: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Dobre przykłady

Page 42: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Źle zdefiniowane

Ma należeć do jednej encji

Relacje powinny być tego samego typu

Przynajmniej dwie relacje

Ta może być ale mogą pojawić się problemy przy implementacji

Page 43: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Dodatkowe więzy integralności● Ważność wobec daty● Zakres parametrów

Page 44: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Diagramy związków encjiERD – Entity-relationship diagrams

● Modelują sferę ''biznesu'' a nie implementacje● Są techniką mającą dobrze zdefiniowaną

strukturę i składnię● Jako rezultat otrzymujemy diagramy ułatwiające

poznanie struktury

Page 45: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Diagramy związków encji

● Zawierają wszystkie informacje● Informacje występują tylko raz ● Jeśli informacje da się odziedziczyć z już

stworzonego modelu, nie jest ona powtarzana● Informacje znajdują się w odpowiednim miejscu

(logika)

ERD – Entity-relationship diagrams

Page 46: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Diagramy związków encjiERD – Entity-relationship diagrams

● Notacja Barkera (Oracle)● Notacja Martina (kruczej stopki -

Crow's Foot)● EER (Extended Entity

Relationship Diagrams)● UML

Page 47: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

EER

Page 48: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

EER [n:m]

Page 49: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Barkera

Page 50: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Crow's FootTODO:Błąd w oznaczeniu

Page 51: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

1:1

1:n

n:m

Page 52: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Relacje n:m

Czy ten opis jest wystarczający ? Czy czegoś nie brakuje ?

Page 53: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 54: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Czy dodanie atrybutu poprawi naszą sytuacje oraz czy będzie zgodne z zasadami ?Najchętniej dodalibyśmy atrybut pośrodku a zatem ...

Page 55: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

... powinniśmy utworzyć nową encje i zastosować relacje 1:n

Page 56: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Idąc dalej jeśli chcielibyśmy obsługiwać zamówienia składające się z większej liczby towarów

Page 57: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 58: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 59: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Słowniki danychTekstowy opis modelu, daje to możliwość umieszczenia danych, które zaciemniły by diagramLub nie ma możliwości ich zamieszczenia (dodatkowe więzy).

O ile w przypadku encji, atrybutów, relacji jest to oczywiste (tabela z opisem),To w przypadku dodatkowych więzów warto podać choć wyjaśniającą tabelkę

Sposób max_min_objętośćopis Zapewnia kontrolę objętości płynu.zawartość Pozwala utrzymać objętość w zakresie od

100l do 1000l

Page 60: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Manipulowanie danymiAlgebra Relacyjna

Algebra relacyjna jest podstawowym zbiorem operacji dla modelu relacyjnego.Za pomoc operacji należących do algebry relacyjnej użytkownik ma możliwość budowania zapytań wyszukiwania. Operacja może działać na jedną lub więcej istniejących relacji a wynikiem jest relacja.Operacje należące do algebry relacyjnej:

● Suma,● Różnica,● Część wspólna,● Iloczyn kartezjański,● Selekcja,● Projekcja,● Złączenie,

Page 61: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Relacja

Czemu nie ''tabela''. Otóż aby tabela mogła zostać nazwana relacją (będącą jedyna strukturą danych w modelu relacyjnym) musi spełnić następujące kryteria (już znane):

1) Każda tabela ma unikalną nazwę w obrębie bazy danych.2) Każda kolumna ma unikalną nazwę w obrębie tabeli.3) Wszystkie wartości w kolumnie są tego samego typu, w każdej tabeli jest co najmniej

jedna kolumna.4) Każdy wiersz jest unikalny w obrębie tabeli (nie ma dwóch takich samych). Tabela

może być pusta.5) Dane są atomowe (nie można przechowywać zbioru wartości).6) Kolejność nie jest istotna.7) Kolejność kolumny nie jest istotna.

Page 62: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Operacja sumy (łączenia)

Relacja wynikowa zawiera wszystkie wiersze z relacji wejściowych bez powtórzeń.Obie tabele (po za tym, że muszą być relacjami) muszą mieć identyczną strukturę (ale dopuszcza się różne nazwy kolumn).

R1 UNION R2 -----> RESULT

Page 63: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Operacja różnicy

Operacja różnicy tworzy relacje na podstawie dwóch relacji biorąc wszystkie wiersze w relacji pierwszej nie występujące w drugiej relacji.

UWAGA: Istotna jest kolejność podania relacji.

R1 DIFFERENCE R2 -----> RESULT1R2 DIFFERENCE R1 -----> RESULT2

Page 64: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Operacja przecięcia (część wspólna)

R1 INTERSECTION R2 ---> RESULT

Relacja wyjściowa zawiera wiersze wspólne dla obu relacji wejściowych.W tym przypadku struktura tabel też powinna być taka sama.

Page 65: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Operacja iloczynu kartezjańskiego

PRODUCT R1 WITH R2 ---> RESULT

Jako relacja wynikowa pojawia się tablica ze wszystkimi kombinacjami wierszy z jednej relacji z wierszami z drugiej relacji. W przypadku tej operacji nie jest wymagane aby relacje miały identyczne struktury

Page 66: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Operacja selekcji (ograniczenia)

RESTRICT R1 WHERE WAR -> RESULTDziałą na pojedynczą relacje zwracając relacje z ograniczoną liczbą wierszy do podanego warunku (np. Ograniczenie do jednego miasta Gdańsk relacji – zakładając, że istnieje kolumna odpowiedzialna za przechowywanie tego typu danych - miasto).

Page 67: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Operacja projekcji (rzutowania)

PROJECT R1 (COL LIST) -> RESULT

Operacja działa na atrybuty relacji, wybiera tylko zadane w liście kolumn (COL LIST)

Page 68: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Operacja złączenia (scalania)

Jako argumenty mogą być podane dwie relacje o różnych strukturach. Jako dodatkowe argument przyjmuje się nazwy kolumn, po jednej z każdej relacji (kolumny złączenia). Wartości z kolumn muszą pochodzić z tej samej dziedziny oraz warunek scalający nie musi być warunkiem równości. Najczęściej wybiera się kolumny będące też kluczami.

Page 69: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

● Równozłączenie● Złączenie naturalne● Złączenie zewnętrzne● Lewostronne złączenie zewnętrzne● Prawostronne złączenie zewnętrzne● Obustronne złączenie zewnętrzne

Page 70: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Równozłączenie

EQUIJOIN R1 WITH R2 ON K1=K2 -> RESULT

W relacji wynikowej znajdują się tylko te wiersze z dwóch relacji, w których wartości w kolumnach złączenia są takie same .

Page 71: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Złączenie naturalne

JOIN R1 WITH R2 ON K1=K2 -> RESULT

Różni się od równozłączenia tym że eliminuje powtarzające się wiersze.

Page 72: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Integralność● Encji● Referencyjnej● Semantyczną (dziedziny)

Page 73: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Integralność encji

Już było !

Page 74: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Integralność referencyjna

Reguła określająca stan klucza obcego. Teoretycznie dopuszczalne są dwie wartości: może on przyjąć wartość klucza głównego albo wartość NULL. Ostatnia możliwość oznacz, że element nie ma reprezentanta . Przypadek taki występuje bardzo rzadko (np. drzewo) i nie jest on pożądany.

Zachowanie tego typu integralności możliwe jest na poziomie tworzenia schematu. Istnieją trzy możliwości wyboru:

●Zmiany ograniczone (RESTRICTED)●Zmiany kaskadowe (CASCADES)●Zmiany powodujące ustawienie NULL (NULLIFIES)

Jako przykład (użytkownicy+tematy)

Page 75: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Integralność semantyczna

Constrains – dodatkowe więzy brane pod uwagę przy zmianach w bazie danych, takie których nie da uwzględnić się w projektowanym diagramie.

np. - data związana z człowiekiem (> od urodzenia) - ograniczenie do poszczególnych miast

Ma to zabezpieczyć przed typowo ludzkimi pomyłkami.

Page 76: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Podstawy języka SQLSQL - Structured Query Language

IBM: Donald D. Chamberlin, Raymond F. Boyce wczesne lata 1970

Pierwszą firmą która zastosowała SQL w produkcie komercyjnym była Oracle

ROK Nazwa Uwagi1986 SQL-86 Pierwszy st.1989 SQL-891992 SQL-92 CROSS JOIN 1999 SQL:1999 Reg. Exp. Rekurencja, wyzwalacze, typy nieskalarne, OO2003 SQL:2003 XML, Kolumny z automatyczną generacją numeru2006 SQL:20062008 SQL:2008 TRUNCATE, dodatki do wyzwalaczy, ORDER BY

American National Standards Institute (ANSI)

(tyle ile będzie potrzeba aby zrozumieć niektóre akcje)

Page 77: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Rozwinięcia proceduralne

Wikipedia, hasło SQL (eng)

Na razie zaznaczam różnorodność, szczegóły później (tu albo następny semestr)

Page 78: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Alternatywy do SQL

Literatura uzupełniająca (do SQL):●Introduction to Oracle9i SQL English Instructor Subscription 40049GC11 Production 1.1 October 2001 D33996

●Oracle® Database SQL Reference 10g Release 1 (10.1) Part Number B10759-01 (SELECT), http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_10002.htm, 2009.10.18

LINQ Language Integrated QueryJPQL Java Persistence Query LanguageOQL Object Query Language

...i naturalnie wiele innych, te jednak zdobywają coraz większą popularność (szczególnie LINQ)

Page 79: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Składnia SQL

Page 80: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Pisanie zapytań SQL● Zapytania SQL nie są czułe na wielkość

znaków (aczkolwiek nazwy tabel mogą być)● Zapytanie może mieć więcej niż jedną linię● Słowa kluczowe nie mogą być ujęte w apostrofy

oraz nie mogą być dzielone między liniami● Warunki zazwyczaj umieszcza się w jednej lini● Zaleca się stosować formatowanie składni

(wcięcia, DUŻE/małe litery)

Page 81: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Kolejność operatorów

● Dzielenie i mnożenie ponad dodawaniem i odejmowaniem

● W przypadku tych samych operatorów działania wykonywane są od lewej do prawej

● Nawiasy aby wymusić kolejność i wprowadzić porządek ( ... jak w innych przypadkach tego typu)

Page 82: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Typ NULL i trzy stanowa logika

SQL,http://en.wikipedia.org/wiki/SQL,2009.10.18

Page 83: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Typy danych w OracleW bazie Oracle typ danych jest atrybutem kolumny (lub zmiennej). Określa on ty informacji w nich przechowanych. Typy można podzielić na trzy grupy

- Znakowe - Liczbowe - Pozostałe

Typy też są dostępne w PL/SQL (o czym później)

Page 84: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Znakowe typy danych

Character data types

● CHAR● VARCHAR2 (VARCHAR - dep.)● NCHAR● NVARCHAR2● LONG● CLOB● NCLOB

Page 85: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

CHAR

Przechowuje od 1 do 2000 znaków. Domyślnie jeden znak. Baza danych Oracle wypełnia automatycznie pozostałe miejsca pustymi znakami. Jest to typ o stałej długości łańcucha znaków.

CHAR = CHAR(1)CHAR(10)CHAR(255)

Jako synonim dla tego typu: CHARACTER

Page 86: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

VARCHAR2

W przeciwieństwie do poprzedniego umożliwia składowanie ciągów znaków o różnej długości. Podobnie jak poprzednio określa się długość tego typu jednak pola nie są dopełniane pustymi znakami. Typ może przechowywać do 1-4000 znaków.

VARCHAR(500)

Typ ten może być w niektórych przypadkach bardziej oszczędny jeśli chodzi o miejsce niż typ CHAR.

Istnieje jeszcze typ VARCHAR jednak Oracle zaleca porzucenie go na rzecz VARCHAR2 oraz nie zapewnia kompatybilności między tymi typami w przyszłości.

Synonimy: STRING, VARCHAR

Page 87: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

NCHAR i NVARCHAR

Oba te typy są podobne do opisanych poprzednio jednak pozwalają przechowywać łańcuchy znaków w zestawie znaków innym niż domyślny dla bazy danych Oracle (ustawionym w konfiguracji).

Od wersji 9i można określać pola w liczbie znaków a nie bajtów

Od wersji 10g istnieje wsparcie dla wyszukiwania oraz akcentów

Zachęta:Zapoznać się z UTF8 - 8-bit Unicode Transformation FormatBOM - byte order mark (np. utf8 EF BB BF)

Page 88: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

LONG, CLOB, NCLOB

Zawiera do 2GB danych znakowych już nie praktykowany. Typ ten ma pewne ograniczenia jeśli chodzi o zapytania SQL. Nie można tu stosować np.

GROUP BYORDER BYCONNECTED BYDISTINCT

Nie można też utworzyć indeksu na takiej kolumnie.

CLOB - Character Large ObjectNCLOB - National Character Large Object

Mogą zawierać do 4GB(128TB).

Typy te należą do typów LOB – Large Object

Page 89: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Liczbowe typy danych● NUMBER(p,s) np. NUMBER(10,-2)● DECIMAL● INTEGER● INT● SMALLINT● FLOAT● DOUBLE PRECISION● REAL● BINARY_FLOAT● BINARY_DOUBLE

Page 90: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

daty● DD-MIE-RR GG:MI:SS MIE (3 lit skrót)● DATE● TIMESTAMP● TIMESTAMP (precyzja sek.) WITH {LOCAL}

TIMEZONE

Page 91: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Inne typy danych● RAW● LONG RAW

Typy nie interpretujące danych (surowe)

Page 92: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

● ROWID

Pseudo kolumna zawierająca informacje o położeniu fizycznym danych (nie można jej zmieniać poleceniami SQL)

Page 93: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

● ORA_ROWSCN

Pseudokolumna pozwalająca obserwować zmiany zachodzące podczas transakcji

Page 94: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

● LOB● CLOB● NLOB● BLOB – Binary Large Object

Page 95: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

● BFILE

Wskaźniki do plików poza bazą danych. Dane tylko do odczytu.

Page 96: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

● XMLType

Wsparcie dla XML. Dane w CLOB

Page 97: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

CREATE TABLE

Page 98: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Przykład tworzenia tabeliCREATE TABLE employees_demo ( employee_id NUMBER(6) , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT emp_last_name_nn NOT NULL , email VARCHAR2(25) CONSTRAINT emp_email_nn NOT NULL , phone_number VARCHAR2(20) , hire_date DATE DEFAULT SYSDATE CONSTRAINT emp_hire_date_nn NOT NULL , job_id VARCHAR2(10) CONSTRAINT emp_job_nn NOT NULL , salary NUMBER(8,2) CONSTRAINT emp_salary_nn NOT NULL , commission_pct NUMBER(2,2) , manager_id NUMBER(6) , department_id NUMBER(4) , dn VARCHAR2(300) , CONSTRAINT emp_salary_min CHECK (salary > 0) , CONSTRAINT emp_email_uk UNIQUE (email) ) ;

Page 99: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Wyświetlenie struktury tabeli

Page 100: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Szczegółowe informacje o tabeli● Każda baza danych ma inne rozwiązanie w

przypadku MySQL jest to konstrukcja SHOW CREATE TABLE [nazwa] lub dostęp do metadanych.

● W Oracle mamy dostęp do metadanych● SELECT * FROM user_objects WHERE

object_type = 'NazwaTabeli'; ● Lub informacje o samych kolumnach SELECT *

FROM user_tab_columns WHERE table_name = 'NazwaTabeli';

Page 101: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Tworzenie tabeli tymczasowej (Temporary Table)

● W Oracle służy do tego instrukcja CREATE GLOBAL TEMPORARY TABLE.

● np.CREATE GLOBAL TEMPORARY TABLE test( id INTEGER, test VARCHAR2(20),) ON COMMIT PRESERVE ROWS;

Page 102: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Wartości domyślne dla kolumn● Definiujemy za pomocą słowa kluczowego

DEFAULT● Po słowie kluczowym podajemy wartość

domyślną.● Możliwość wykorzystania niektórych

pseudokolumn takich jak SYSDATE● Domyślną wartością domyślną jest NULL

Page 103: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Możliwość szyfrowania kolumn● W bazach danych takich jak Oracle istnieje

możliwość szyfrowania poszczególnych kolumn bazy danych (słowo kluczowe ENCRYPT)

● Informacje o kolumnach szyfrowanych znajdują się w „user_encrypted_columns”

Page 104: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

UWAGA: W przypadku Oracle najpierw trzeba utworzyć w systemie portfel pozwalający przechowywać informacje o systemie autoryzacji

Page 105: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Kolumny wirtualne● Nie wszystkie bazy danych pozwalają na

wstawianie tego typu kolumn● Kolumna wirtualna to taka, która odwołuje się

do innych kolumn w tabeli

Page 106: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Zmiany tabeli (ALTER)● Polecenie ALTER TABLE służy do wszelkich

zmian w obrębie tabeli takich jak:● Dodanie, usunięcie, zmiana kolumny● Dodanie, usunięcie, odblokowanie, zablokowanie

więzów● Zmiana nazwy● Każda baza danych ma jeszcze swoje dodatkowe

elementy, które można zmieniać np. dla MySQL ALTER TABLE ENGINE

Page 107: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

WSTAWIANIE KOLUMNY● Dla tabeli TEST dodanie kolumny NOWA

wygląda następująco● ALTER TABLE TEST ADD NOWA INTEGER

● Po nazwie kolumny pojawia się definicja kolumny w takiej samej postaci jak w przypadku CREATE TABLE.

● Podobnie możemy postępować w przypadku kolumny wirtualnej, szyfrowanej, ...

Page 108: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

MODYFIKOWANIE KOLUMNY

● Zmiany rozmiaru kolumny np. VARCHAR2(15) na VARCHAR2(20). UWAGA: Wartość może być zmniejszona tylko gdy kolumna nie zawiera wierszy lub są ustawione na NULL (Oracle). Podobnie w przypadku zmiany precyzji dla kolumny liczbowej

● Zmiana typu danych. Zmiany mogą być dokonane tylko w przypadku kiedy istnieje możliwość konwersji.

Page 109: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

● ALTER TABLE tabela MODIFY kolumna VARCHAR(100)

● Usunięcie tabeli wymaga podania tylko nazwyALTER TABLE tabela DROP COLUMN kolumna

Page 110: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

WięzyTu omówione tylko bardzo wstępnie. Właściwie z ograniczeniem do PK i FK i to też oględnie.

Page 111: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 112: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

FOREIGN KEY

Page 113: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 114: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

DODAWANIE WIĘZÓW● Więzy CHECK (dla kolumny liczba)

ALTER TABLE tabela ADD CONSTRAINT nazwa_wiezu CHECK(liczba IN (1,2,3,4,5));

● Więzy NOT NULL dla kolumny id● ALTER TABLE tabela MODIFY id

CONSTRAINT nazwa_wiezu NOT NULL;

Page 115: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

WŁĄCZANIE WYŁĄCZANIE WIĘZÓW

● ALTER TABLE tabela ENABLE CONSTRAINT nazwa_wiezu;

● ALTER TABLE tabela DISABLE CONSTRAINT nazwa_wiezu;

● Mamy możliwość włączenia więzów ze sprawdzeniem tych co już były ENABLE VALIDATE (domyślnie) lub ze sprawdzeniem tylko nowo dodanych wierszy ENABLE NONVALIDATE

Page 116: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Więzy odroczone● Słowo kluczowe INITIALLY DEFERRED● Konstrukcja:● ALTER TABLE tabela ADD CONSTRAINT

nazwa_wiezu NOT NULL DEFERRABLE INITIALLY DEFERRED

● Tak dodane wiązanie nie będzie aktywny aż do wydania polecenia COMMIT.

● Często stosowane w przypadku kiedy w skrypcie SQL więzy nie są definiowane w odpowiedniej kolejności.

Page 117: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

● Możliwość zmiany nazwy kolumny za pomocą polecenia RENAME dla ORACLE w przypadku np. MySQL realizujemy też za pomocą ALTER TABLE

● Pod tym względem (polecenie ALTER) różne systemy bazodanowe mogą posiadać drobne różnice !!

Page 118: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Obcinanie tabeli● TRUNCATE TABLE tabela;● Powoduje usunięcie wszystkich wierszy w tabeli

i przywrócenie (zależy od BD) ustawień dla wybranej tabeli.

● UWAGA: To polecenie ze względu na szybkość wykonania jest często używane zamiast polecenie DELETE należącego do zbioru poleceń manipulujących danymi DML. Polecenie truncate należy do DDL a zatem nie ma tutaj mowy o przywróceniu danych w obrębie transakcji !!

Page 119: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

DROP TABLE● Usuwanie tabeli: DROP TABLE tabela;● W niektórych systemach istnieją konstrukcje

DROP TABLE IF EXISTS● Opcjonalne są też reguły (np. kaskadowo czy

restrykcyjnie).

Page 120: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Sekwencje● Sekwencje istnieją w większości baz danych.

Służą one do generowania sekwencji liczb rzeczywistych co wykorzystuje się najczęściej w przypadku klucza głównego.

● W bazie MySQL istnieje specyficzny typ dla kolumny AUTO_INCREMENT (nieudolnie wypełniając brak po sekwencjach)

Page 121: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Definicja● Najczęściej w systemach BD mamy do

dyspozycji● Nazwę● Liczbę początkową● Skok● Minimalną oraz Maksymalną wartość● Czy ma być cykliczna● Czy wartości mają być przechowywane w pamięci

podręcznej (tzw. CACHE)

Page 122: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Przykład wykorzystania sekwencji

Page 123: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

SELECT

SELECT *|{[DISTINCT] column|expression [alias],...}FROM table;

Page 124: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

SELECT - tablice do przykładów

Page 125: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 126: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 127: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

SELECT – alias kolumn● Zmienia nagłówek(nazwę) kolumny● Przydatny podczas obliczeń na kolumnach● Występuje odrazu po nazwie kolumny

poprzedzony słowem kluczowym AS● Potrzebne ” ” gdy zawiera spacje lub ma być

czuły na wielkość liter

Page 128: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 129: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

SELECT – znów o NULL

Page 130: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Operator złączenia● Łączy kolumny lub ciągi znaków w inną

kolumnę● Zapisuje się go jako: ||● Rezultatem działania jest ciąg znaków

Page 131: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 132: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 133: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

UWAGA

RDBMS Operacja WynikOracle last_name||job_id PanX22Oracle last_name||NULL NULLPostgreSQL last_name||job_id PanX22FireBird last_name||job_id PanX22MySQL CONCAT(last_na,me||job_id) PanX22MySQL CONCAT(last_name, NULL) NULL

Zakładamy, że mamy wartości:

last_name = PanXjob_id = 22

Działanie w większości baz danych jest podobnie ale są odstępstwa, oraz przyzwyczajenia z innych programów (np. Język c++). Nie zawsze jest oczywisty wynik funkcji CONCAT w MySQL (większość spodziewa się PanX zamiast NULL, jednak to było by niezgodne ze sposobem traktowania wartości NULL)

Page 134: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 135: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Podwójne wiersze

Page 136: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 137: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Ograniczenie danych

Page 138: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 139: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 140: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

WHERE i napisy/daty

- napisy/daty umieszczone w apostrofach ('jakiś tekst')- czułe na małe duże litery i format daty- domyślny format daty DD-MON-RR

Page 141: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Operatory porównania

Page 142: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 143: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Pozostałe operacje porównania

Page 144: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Użycie BETWEEN

Page 145: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Użycie IN

Page 146: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Użycie LIKE● Umożliwia podanie wzorca wyszukiwania w

ciągach znaków● Wzorzec może zawierać zarówno litery jak i

cyfry● Znak % oznacza dowolny ciąg znakó● Znak _ oznacza jeden znak

Page 147: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Dla wyszukania znaków % oraz _ należy użyć znaku ESCAPE

SELECT last_name FROM employees WHERE last_name LIKE '!%' escape '!';

Page 148: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Warunki dla NULL

Page 149: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Zastosowanie operatorów logicznych w ograniczeniu

WARUNEK

AND Zwraca prawdę gdy oba prawdziwe

OR Zwraca prawdę gdy jeden z dwóch prawdziwy lub oba prawdziwe

NOT Zwraca prawdę gdy nieprawdziwy

Page 150: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

AND

Page 151: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

OR

Page 152: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

NOT

Page 153: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Kolejność wykonywania działań

Page 154: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 155: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

ORDER BYMożna sortować: - ASC: rosnąco, ta wartość jest domyślna - DESC: malejącoSkładnia ORDER BY pojawia się ostatnio w składni SELECT

Page 156: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Sortowanie: malejące

Page 157: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Sortowanie po aliasie

Page 158: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Sortowanie po wielu kolumnach

Page 159: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Można też sortować po kolumnie, której nie ma zapytaniu SELECT

np.

SELECT * FROM tablica ORDER BY dbms_random.value

Page 160: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Wyświetlanie danych z wielu tabel

Page 161: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Iloczyn kartezjański jako efekt złego zapytania

Page 162: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Znaczenie konstrukcji● Optymalizator zwalnia nas z wnikliwego

analizowania zapytań w początkowej fazie, jednak tam gdzie wiemy jaki powinien być kierunek optymalizacji powinniśmy go napisać jawnie a nie liczyć na optymalizator.

● Dodatkowo, jeśli tworzymy rozwiązanie uniwersalne, działające na wielu systemach spełniających standardy SQL powinniśmy założyć różne optymalizatory (skrajnie ich brak ?!)

● Poniżej trywialny przykład pokazujący różnicę.

Page 163: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

UWAGA !!!● Tam gdzie nie mamy pomysłu na optymalizacje

nie powinniśmy robić nic na siłę.● Optymalizator w takim przypadku w 99% będzie

dawał lepsze rezultaty) w szczególności biorąc pod uwag rozwój bazy danych (przyrost)

● Należy też zakładać rozwój optymalizatora w kolejnych wersjach systemów BD.

Page 164: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

● CREATE TABLE a (id INT PRIMARY KEY);● CREATE TABLE b (id INT PRIMARY KEY, ida

INT NOT NULL );● INSERT INTO a VALUES(1);● INSERT INTO a VALUES(2);● INSERT INTO b VALUES(1,1);● INSERT INTO b VALUES(2,2);

Page 165: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 166: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 167: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Zaczerpnięte z 8.2.2. EXPLAIN Output Format (2013.02.17)http://dev.mysql.com/doc/refman/5.0/en/explain-output.html#explain_select_type

Page 168: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 169: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 170: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Typy złączenia

Oracle● Equijoin● Non-equijoin● Outer join● Self join

SQL: 1999● "Cross join"● "Natural join"● z zastosowaniem klauzuli

(np. ON)● Pełny albo dwustronny "outer

join"● dowolny warunek złączenia

("join") dla "outer join"

Page 171: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Składnia Oracle

Dostęp do przestrzeni tabel (spotykany w przypadku baz SQL)

tabela.kolumnanazwa_bazy_danych.tabela.kolumna

Warunek złączenia umieszczany jest w klauzuli WHERE

Page 172: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Equijoin

Page 173: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 174: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Stosowanie aliasów na tablice

Page 175: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Połączenie więcej niż jednej tablicy

Aby połączyć n tablic należy użyć minimalnie n-1 złączeń !

Page 176: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Non-equijoin

Page 177: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 178: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Outer join

Page 179: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Outer join (złączenie zewnęrzne) stosuje się wtedy gdy che się zobaczyć wiersze nie spełniające warunku.

W BD Oracle oznaczone jako (+)

Page 180: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 181: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Self joins - samozłączenie

Page 182: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 183: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Składnia SQL: 1999

Page 184: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

CROSS JOIN

UWAGA: CROSS JOIN daje taki sam wynik jak iloczyn kartezjański dla dwóch tabel

Page 185: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

NATURAL JOIN● Bazuje na kolumnach z obu tabel, które mają

takie same nazwy● Wybiera te wiersze, które mają te same

wartości we wszystkich pasujących kolumnach● W przypadku tych samych nazw a różnych

typów zwracany jest błąd

Page 186: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 187: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Składnia USING● Stosuje się tam gdzie nie można NATURAL

JOIN ale też NATURAL JOIN może być modyfikowany za pomocą USING

● Stosować należy do złączenia jednej kolumny gdy pasuje więcej

● Nie należy stosować aliasów ani nazw tablic dla kolumn

● NATURAL JOIN i USING wzajemnie się wykluczają

Page 188: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

TODO: bardziej czyt. przykład

Page 189: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Złączenie z klauzulą ON● Bazuje na equijoin łącząc kolumny o tej samej

nazwie● Aby wybrać kolumny do złączenia lub jakiś

warunek złączenia stosuje się klauzule ON● Warunek złączenia jest odseparowany od

innych warunków wyszukania

Page 190: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 191: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 192: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

INNER .vs. OUTER

Page 193: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 194: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 195: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Dołączanie dodatkowych warunków

Page 196: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Agregacja danych w SQL (podstawy - minimum)

● Klauzula GROUP BY i jej zastosowanie● Podstawowe funkcje agregujące COUNT, MAX, MIN, AVG● Klauzula HAVING i podstawowe zapytania z SELECT

(wszystko było na tablicy)

Page 197: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Funkcje w bazie Oracle

Page 198: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Typy funkcji

Page 199: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Funkcje działające na jeden wiersz● Zmieniają dane● Otrzymują argumenty, zwracają wartość● Działają na jeden wiersz po czym zwracają

wartość● Zwracają jedną wartość dlajednego wiersza● Mogą zmieniać typ● Mogą być zagnieżdżone● Argumentem może być kolumna albo wartość

Page 200: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 201: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 202: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 203: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 204: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 205: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Funkcje operujące na datach/czasie

Page 206: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

● MONTHS_BETWEEN ('01-SEP-95','11-JAN-94') --> 19.6774194● ADD_MONTHS ('11-JAN-94',6) --> '11-JUL-94'● NEXT_DAY ('01-SEP-95','FRIDAY') --> '08-SEP-95'● LAST_DAY('01-FEB-95') --> '28-FEB-95'

Page 207: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Funkcje jawnej konwersji typów

Page 208: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Oracle dokonuje niejawnie konwersji dla:

Przypisania

Wyrażeń

Page 209: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Jawnie

Page 210: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Istnieją jeszcze TO_NUMER, TO_DATE – tu chciałem tylko zaznaczyć problem konwersji !

Page 211: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Funkcja NVL● Konwertuje NULL na podaną wartość● Wartość może być: datą, ciągiem znaków,

liczbą całkowitą● Typy danych muszą się zgadzać ! Np.

NVL(hire_date,'01-JAN-97')

Page 212: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 213: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Podobne do NVL● NVL (expr1, expr2)● NVL2 (expr1, expr2, expr3)● NULLIF (expr1, expr2)● COALESCE (expr1, expr2, ..., exprn)

Page 214: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 215: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 216: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 217: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Podzapytania● Podzapytania to zapytania zawarte w innych

zapytaniach● W większości baz danych (w tym w Oracle)

podzapytanie może znaleźć się w klauzuli:● WHERE● FROM● SELECT

● Podzapytanie mogą być związane z innymi zapytaniami jak np. UPDATE (w tych przypadkach istnieją większe ograniczenia).

Page 218: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Zalety/Wady● Podzapytania pozwalają na prostszą bardziej

czytelną konstrukcję (SQL – strukturalny)● Nieumiejętnie utworzone podzapytania może

wpłynąć negatywnie na wydajność bazy danych lub podać dane o które nam nie chodziło.

Page 219: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Podzapytanie jako skalar● W najprostszym przypadku możemy sobie

wyobrazić zapytanie SQL, które zwraca dokładnie jeden wiersz i jedną kolumnę (a zatem skalar).

● SELECT * FROM tabela WHERE data = (SELECT sysdate FROM DUAL);

Page 220: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Podzapytania z ALL, ANY, SOME

Operator ALL przyrównuje z listą bądź podzapytaniemKonstrukcję:SELECT * FROM tabela WHERE pole > ANY(10,20)Można zapisać jakoSELECT * FROM tabela WHERE pole > 10 AND pole > 20

Page 221: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Podzapytanie może zatem wyglądać następującoSELECT * FROM tabela WHERE data >= ANY (SELECT daty FROM tabelaDat)

Page 222: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

● W przypadku ANY w konstrukcji porównania nadal możemy używać >,<,= jak w ALL z tym, że warunek jest z operatorem OR (w przypadku ALL był to operator AND). Wybieramy zatem przynajmniej jeden z.

● SOME dokonuje dokładnie tego samego porównania co ANY

Page 223: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Podzapytanie z operatorem IN● Zgodnie z zasadą działania IN otrzymamy

wartość prawda jeśli w zbiorze zwróconym przez zapytanie znajdzie się chociaż raz wartość porównywana.

● Stwórzmy tabele Liczby z kolumną id dodajmy 5 wierszy jako kolejne liczby: 1,2,3,4,5

● SELECT 'jest' FROM dual WHERE 1 IN (SELECT id FROM Liczby);

● W tym przypadku zwróci napis jest, jeśli podali byśmy liczbę np.6 nie otrzymali byśmy w rezultacie ani jednego wiersza.

Page 224: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Podzapytania skorelowane (correlated subquery)

● Podzapytania skorelowane odnoszą się do tablicy zewnętrznejSELECT * FROM tabela1 WHERE pole1 IN(SELECT pole2 FROM tabela2 WHERE tabela2.id2 = tabela1.id1);

Page 225: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Podzapytania odnoszące się do wektora

● Dotychczas porównanie podzapytań odnosiło się do wartości skalarnych, SQL umożliwia wykonywanie zapytań porównujących wektor danych np.SELECT 'jest' FROM dual WHERE (2,4) = (SELECT 2,4 FROM dual);

Page 226: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Podzapytania w klauzuli WHERE (nested subqueries)

● W tym przypadku stosuje się podzapytania pozwalające na porównywanie z danym zbiorem danych (dotychczasowe przypadki podzapytań właśnie były w klauzuli where)

Page 227: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Podzapytania w klauzuli SELECT● Podzapytania w tej klauzuli muszą zwracać

wartość skalarną.● Aby uzyskać warunek pozwalający na to, że

zapytanie w sekcji SELECT zwróci jedną wartość, stosuje się funkcje agregujące.

Page 228: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Podzapytanie w klauzuli FROM (inline views)

● W tym przypadku podzapytanie można traktować jak tabelę (w uproszczeniu).SELECT * FROM (SELECT * FROM Liczby) AS AliasTabeli

Page 229: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Język manipulacji danymi DML - Data Manipulation Language

● INSERT● UPDATE● DELETE

Page 230: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Dodawanie wierszy

Page 231: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

INSERT

INSERT INTO table [(column [, column...])]VALUES (value [, value...]);

Page 232: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

INSERT

INSERT INTO departments(department_id, department_name, manager_id, location_id)VALUES (70, 'Public Relations', 100, 1700);

Page 233: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

INSERT z NULL'ami

Page 234: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Wartości specjalne

Page 235: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Kopiowanie wartości z innej tabeliSkładnia

INSERT … SELECT … FROM

Page 236: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Konstrukcje wczytujące naraz n-wierszy

● MySQL/MSSQL 2008: dodawanie n-wierszy narazINSERT INTO tabela VALUES(1), (2), (3) … ;

● Oracle posiada konstrukcję● INSERT ALL

INTO tabela VALUES(1)INTO tabela VALUES(2) … SELECT * FROM dual;

● Zawsze (jeśli zależy nam na jednym zapytaniu) możemy użyć konstrukcji z UNION (ALL)

Page 237: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Rozwiązania pozwalające ładować wiersze z pliku

● Standardowe skrypty SQL (zawierające n-INSERT'ów)

● Duża część baz danych posiada składnię LOAD (czy to umieszczoną niejako składnie rozszerzającą SQL czy też w pakietach narzędziowych – wtedy dostępna tylko tam)

Page 238: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

LOAD w oracle● LOAD DATA

INFILE <dataFile>APPEND INTO TABLE <tableName>FIELDS TERMINATED BY '<separator>'(<list of all attribute names to load>)

● W tym przypadku jest możliwość podania jak plik * i po linijce BEGINDATA można rozpocząć transmisje danych bezpośrednio.

Page 239: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

LOAD DATAINFILE *INTO TABLE tabelaFIELDS TERMINATED BY '|'(id, data DATE 'yyyy.mm.dd')BEGINDATA1|2012.06.222|1999.11.11

Page 240: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

LOAD w MYSQL● LOAD DATA INFILE 'c:\test.txt' INTO TABLE

test FIELDS TERMINATED BY ',' ;

● Plika test.txt zawiera dane rozdzielane przecinkami, struktura tabeli powinna być odpowiednia do danych

● W MySQL LOAD posiada bogaty wybór opcji.

Page 241: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

BULK INSERT w MSSQL

BULKINSERT tabelaFROM 'c:\test.txt'WITH(

FIELDTERMINATOR = ',',ROWTERMINATOR = '\n'

)GO

Page 242: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

● Przedstawione tutaj przykłady to jedne z możliwych rozwiązań bazy danych nie mają jednego wspólnego standardu ładowania dużej ilości danych, każda posiada rozwiązania własne umożliwiające wczytywanie konkretnych formatów pliku (np. XML, XLS), własne „loadery”

● Istnieje też możliwość tworzenia własnych „loaderów” danych.

Page 243: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Zmiana wartości w tabeli

Page 244: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

UPDATE

UPDATE tableSET column = value [, column = value, ...][WHERE condition];

Page 245: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie
Page 246: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

UWAGA na więzy

Page 247: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Usuwanie wierszy

Page 248: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

DELETE

DELETE [FROM] table[WHERE condition];

Page 249: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

DELETE

Page 250: Bazy Danych (cz. 1) - dbserver.mif.pg.gda.pldbserver.mif.pg.gda.pl/wyk/dbora.pdf · postacie normalne stosuje się gdy wymagana jest większa optymalizacja. W przedstawionym przykładzie

Więzy !