Plan wykładu Spis treści 1 Projekt fizyczny 1 2 Transformacja ML do PF 2 2.1 Definiowanie tabel............................... 2 2.2 Więzy integralności............................... 4 2.3 Modyfikacja definicji.............................. 8 2.4 Dodatkowe obiekty............................... 10 3 Perspektywy słownika danych 12 4 Źródła 12 1 Projekt fizyczny Projektowanie systemu informatycznego Projekt fizyczny bazy danych Projekt fizyczny jest realizowany przez informatyków na bazie specyfikacji wymagań i modelu logicznego. Powiązany ze ściśle określonym Sytemem Zarządzania Bazą Danych. Określa struktury logiczne i fizyczne. Efektem projektu fizycznego będą skrypty zawierające definicje: tabel, ograniczeń integralności, 1
parametrów fizycznych bazy danych, dodatkowych obiektów (perspektywy, indeksy,sekwencje itp.), użytkowników i ich uprawnień. Projekt fizyczny może również zawierać skrypty z danymi jakimi baza ma być wypełniona. SQL DDL Dla relacyjnych baz danych narzędziem fizycznej realizacji będzie część SQL a nazywana DDL (ang. Data Definition Language) zawierająca niezbędne polecenia do tworzenia (CREATE), usuwania (DROP) i modyfikacji (ALTER) struktur danych. Nigdy nie należy mylić poleceń DML i DDL: DML INSERT UPDATE DELETE DDL CREATE ALTER DROP 2 Transformacja ML do PF 2.1 Definiowanie tabel CREATE TABLE I Składnia polecenia CREATE TABLE: CREATE TABLE [schemat.]nazwa_tabeli [(wlasnosci_relacyjne)] wlasnosci_fizyczne wlasnosci_tabeli; CREATE TABLE II Definicja kolumn - własności relacyjnych tabeli: CREATE TABLE nazwa_tabeli ( kolumna1 typ[(rozmiar)] [DEFAULT wyrazenie1] [wiezy_kolumny1], kolumna2 typ[(rozmiar)] [DEFAULT wyrazenie2] [wiezy_kolumny2], [wiezy_tabeli],... CREATE TABLE mieszkancy ( PESEL NUMBER(11), nazwisko VARCHAR2(30), imiona VARCHAR2(30), data_zameldowania DATE DEFAULT CURRENT_DATE 2
CREATE TABLE III Własności fizyczne: CREATE TABLE nazwa_tabeli [(wlasnosci_relacyjne)] { atrybuty_segmentu [ kompresja ] ORGANIZATION {typ_organizacji_segmentu} CLUSTER nazwa ( kolumna1[, kolumna2 ]... )} wlasnosci_tabeli; CREATE TABLE demo ( id NUMBER(10) ) TABLESPACE przyklad STORAGE (INITIAL 6144 CREATE TABLE IV CREATE TABLE dzialy ( id NUMBER(2) PRIMARY KEY, nazwa VARCHAR(50), lokalizacja VARCHAR(20) ) ORGANIZATION INDEX PCTHRESHOLD 30 OVERFLOW TABLESPACE nadmiar; CREATE TABLE V Własności tabeli: CREATE TABLE nazwa_tabeli [(wlasnosci_relacyjne)] wlasnosci_fizyczne [wlasnosci_kolumn] [opis_partycji] [CACHE NOCACHE] [parallel] [ROWDEPENDENCIES NOROWDEPENDENCIES] [MONITORING NOMONITORING] [enable_disable_clause] [przenoszenie_wierszy] [AS podzapytanie]; CREATE TABLE VI CREATE TABLE klienci ( id NUMBER(6), nazwisko VARCHAR2(30), imiona VARCHAR2(30), adres VARCHAR2(200), 3
nls VARCHAR2(30), email VARCHAR2(30) ) PARTITION BY LIST (nls) ( PARTITION azja VALUES ( CHINY, TAJLANDIA ), PARTITION europa VALUES ( NIEMCY, WLOCHY ), PARTITION zachod VALUES ( USA ), PARTITION wschod VALUES ( ROSJA ), PARTITION reszta VALUES (DEFAULT) CREATE TABLE VII CREATE TABLE klienci ( id NUMBER(6), naziwsko VARCHAR2(30), imiona VARCHAR2(30), adres VARCHAR2(200), rok_zal NUMBER(4), email VARCHAR2(30) ) PARTITION BY RANGE (rok_zal) ( PARTITION rok_2000 VALUES LESS THAN (2000), PARTITION rok_2004 VALUES LESS THAN (2004), PARTITION rok_2008 VALUES LESS THAN (2008), PARTITION rok_2012 VALUES LESS THAN (2012) CREATE TABLE pracownicy_archiwalni AS SELECT * FROM pracownicy WHERE data_zwol IS NOT NULL; DROP TABLE Usuwanie tabeli: DROP TABLE [schemat.]nazwa_tabeli [CASCADE CONSTRAINTS]; usunięcie definicji tabeli usunięcie danych z tabeli usunięcie wyzwalaczy i indeksów związanych z tabelą zwolnienie fizycznego segmentu i jego rozszerzeń ustawienie atrybutu niepoprawności dla powiązanych perspektyw, synonimów, procedur, itp. 2.2 Więzy integralności Definiowanie ograniczeń Sposoby definicji ograniczeń: ograniczenia kolumny - definiowane inline lub out of line (za wyjatkiem NOT NULL) ograniczenia tabeli - definiowane out of line 4
nazwane przez użytkownika nazwane przez system ograniczenia tworzone w trakcie tworzenia struktury tabeli ( inline lub out of line ) ograniczenia tworzone po tworzeniu tabeli poprzez poprawianie jej struktury (wyłącznie out of line ) Typy ograniczeń Typy ograniczeń: NOT NULL - wartość obowiązkowa CHECK (warunek_logiczny) - wartość spełniająca narzucony warunek UNIQUE - wartość niepowtarzalna, jednoznaczna PRIMARY KEY - klucz główny FOREIGN KEY, REFERENCES - klucz obcy CONSTRAINT I Definicja ograniczeń inline : CREATE TABLE nazwa_tabeli ( kol1 typ[(rozmiar)] [DEFAULT wyrazenie1] [[CONSTRAINT nazwa_ogr_kolumny] { [NOT] NULL UNIQUE PRIMARY KEY REFERENCES tabela(kol1 [, kol2]...) [ON DELETE { CASCADE SET NULL }] CHECK (warunek_logiczny) } [DISABLE ENABLE]],... CONSTRAINT II Definicja ograniczeń out of line : CREATE TABLE nazwa_tabeli ( [[CONSTRAINT nazwa_ogr_tabeli] { UNIQUE ( kol1 [, kol2]... ) PRIMARY KEY ( kol1 [, kol2]...) FOREIGN KEY ( kol1 [, kol2]...) REFERENCES tabela(kol1 [,kol2]...) [ON DELETE { CASCADE SET NULL }] CHECK (warunek_logiczny) } [DISABLE ENABLE]],... 5
NOT NULL NOT NULL - dla kolumn o wartościach obowiązkowych. CREATE TABLE osoby( data_urodzenia DATE CONSTRAINT data_nn NOT NULL,... CHECK CHECK - wartości kolumny dla każdego wiersza spełnią zadany warunek (warunek nie może zawierać podzapytań, ani funkcji zmiennych w czasie). CREATE TABLE osoby( data_urodzenia DATE CONSTRAINT data_nn NOT NULL, plec CHAR(1) CHECK (plec IN ( K, M )), wiek NUMBER(3), CONSTRAINT wiek_ch CHECK (wiek BETWEEN 0 AND 120) UNIQUE UNIQUE - wartości w kolumnie będą niepowtarzalne. CREATE TABLE osoby( pesel NUMBER(11) CONSTRAINT pesel_u UNIQUE, nip NUMBER(10), data_urodzenia DATE CONSTRAINT data_nn NOT NULL, UNIQUE(nip) PRIMARY KEY I PRIMARY KEY - więzy klucza głównego oznaczają, że kolumna/kolumny przyjmą wartości jednoznaczne i niepuste. Dla klucza głównego tworzony jest automatycznie indeks. 6
CREATE TABLE mieszkancy( pesel NUMBER(11) PRIMARY KEY data_urodzenia DATE NOT NULL, nr_dokumentu VARCHAR2(20) lub: PRIMARY KEY II CREATE TABLE mieszkancy( pesel NUMBER(11) CONSTRAINT mieszy_pk PRIMARY KEY, data_urodzenia DATE NOT NULL, nr_dokumentu VARCHAR2(20) CREATE TABLE mieszkancy( pesel NUMBER(11), data_urodzenia DATE NOT NULL, nr_dokumentu VARCHAR2(20), PRIMARY KEY (pesel) CREATE TABLE mieszkancy( pesel NUMBER(11), data_urodzenia DATE NOT NULL, nr_dokumentu VARCHAR2(20), CONSTRAINT mieszy_pk PRIMARY KEY (pesel) FOREIGN KEY I FOREIGN KEY - więzy klucza obcego - wartości z kolumn klucza istnieją we wcześniej zdefiniowanym kluczu kandydującym innej lub tej samej tabeli (może przyjąć wartość pustą). CREATE TABLE rachunki( nr_rachunku NUMBER(10) PRIMARY KEY, kwota NUMBER(6,2) NOT NULL, termin DATE, odsetki NUMBER(6,2), id_mieszkania NUMBER(10) REFERENCES mieszkania(id_mieszkania) lub: FOREIGN KEY II CREATE TABLE rachunki(..., id_mieszkania NUMBER(10) CONSTRAINT rach_fk REFERENCES mieszkania(id_mieszkania) 7
CREATE TABLE rachunki( id_mieszkania NUMBER(10), FOREIGN KEY (id_mieszkania) REFERENCES mieszkania(id_mieszkania) CREATE TABLE rachunki( id_mieszkania NUMBER(10), CONSTRAINT rach_fk FOREIGN KEY (id_mieszkania) REFERENCES mieszkania(id_mieszkania) FOREIGN KEY III Opcje ON DELETE SET NULL i ON DELETE CASCADE CREATE TABLE rachunki( id_mieszkania NUMBER(10), CONSTRAINT rach_fk FOREIGN KEY (id_mieszkania) REFERENCES mieszkania(id_mieszkania) ON DELETE SET NULL CREATE TABLE rachunki( id_mieszkania NUMBER(10), CONSTRAINT rach_fk FOREIGN KEY (id_mieszkania) REFERENCES mieszkania(id_mieszkania) ON DELETE CASCADE 2.3 Modyfikacja definicji ALTER TABLE I ALTER TABLE - polecenie umożliwiające wprowadzenie zmian do istniejącej struktury logicznej i cech fizycznych tabeli. Niektóre możliwości ALTER TABLE: ADD - dodanie kolumn lub ograniczeń MODIFY - modyfikacja istniejących kolumn lub ograniczeń DROP - usunięcie kolumn lub ograniczeń RENAME - zmiana nazwy tabeli, kolumny lub ograniczeń ENABLE - włączenie ograniczenia DISABLE - wyłączenie ograniczenia i wiele innych... 8
ALTER TABLE - zmiany kolumn I Dodanie kolumn: ALTER TABLE nazwa_tabeli ADD (kol1 typ [DEFAULT wyrazenie] [wiezy_kol1]) [, (kol2 typ [DEFAULT wyrazenie] [wiezy_kol2])]... ; ALTER TABLE rachunki ADD (id_mieszkanca NUMBER(10) REFERENCES mieszkancy(id_mieszkanca) Zmiana kolumn: ALTER TABLE nazwa_tabeli MODIFY (kol1 [typ] [DEFAULT wyrazenie] [wiezy_kol1]) [, (kol2 [typ] [DEFAULT wyrazenie] [wiezy_kol2])]... ; ALTER TABLE rachunki MODIFY (nr_rachunku NUMBER(12) ALTER TABLE - zmiany kolumn II Usunięcie kolumn: ALTER TABLE nazwa_tabeli DROP COLUMN kol1 ( kol1 [, kol2]... ) ; ALTER TABLE rachunki DROP COLUMN id_mieszkanca; Zmiana nazwy: ALTER TABLE nazwa_tabeli RENAME COLUMN stara_nazwa TO nowa_nazwa; ALTER TABLE rachunki RENAME COLUMN id_rachunku TO nr_rachunku; ALTER TABLE - ograniczenia I Modyfikacja ograniczeń:: ALTER TABLE nazwa_tabeli { ADD CONSTRAINT nazwa_ograniczenia PRIMARY KEY UNIQUE (kol1) [, UNIQUE (kol2) ] MODIFY CONSTRAINT nazwa_ograniczenia PRIMARY KEY UNIQUE (kol1) [, UNIQUE (kol2) ]... RENAME CONSTRAINT stara_nazwa TO nowa_nazwa DROP PRIMARY KEY UNIQUE ( kol1 [, kol2]... )... [CASCADE] [ KEEP DROP INDEX] CONSTRAINT nazwa_ograniczenia [CASCADE]; ENABLE DISABLE UNIQUE ( kol1 [, kol2]... ) PRIMARY KEY CONSTRAINT nazwa_ograniczenia ALTER TABLE mieszkancy ADD CONSTRAINT nr_dok_u UNIQUE (nr_dokumentu 9
konceptualny logiczny... 2.4 Dodatkowe obiekty Indeksy Indeks może być tworzony jawnie lub niejawnie. Jawnie jest realizowany przez użytkownika poleceniem CREATE INDEX: CREATE [UNIQUE BITMAP] INDEX nazwa_indeksu ON nazwa_tabeli (kol1 [ASC DESC] [, kol2 [ASC DESC]] niejawnie może być automatycznie zakładany przez system, np. dla klucza głównego. Modyfikacja indeksu: ALTER INDEX stara_nazwa TO nowa_nazwa; ALTER INDEX nazwa REBUILD; Usuwanie indeksów: DROP INDEX nazwa; Klastry Tworzenie kontenera na tabele odbywa się za pomocą polecenia CREATE CLUSTER: CREATE CLUSTER nazwa ( kol1 typ [, kol2 typ]... ) [atrybuty fizyczne SIZE wielkosc TABLESPACE nazwa_przestrzeni]...; CREATE CLUSTER prac_dzialu_cl ( id_dzialu NUMBER(2)) SIZE 500 TABLESPACE users; 10
Perspektywy widoki, wirtualne tabele - reprezentujące wybraną zawartość tabel lub innych perspektyw nie składowane fizycznie na dysku, generowane przy każdym wywołaniu nazwy wyrażenia nie będące kolumnami, z klauzuli SELECT podzapytania, muszą być zaopatrzone w aliasy lub perspektywa musi przewidzieć nowe nazewnictwo wszystkich kolumn wyniku podzapytania istnieje możliwość modyfikacji danych za pośrednictwem perspektyw pod warunkiem, że polecenie będzie dla systemu jednoznaczne (uniemożliwiają to grupowania, funkcje, złączenia, podzapytania, porządkowanie, DISTINCT, wyrażenia złożone, brak klucza głównego i atrybutów obowiązkowych, brak uprawnień, ograniczenie WITH READ ONLY) opcja WITH CHECK OPTION - umożliwia sprawdzenie, czy modyfikowane za pośrednictwem perspektywy dane spełniają warunki logiczne zawarte wewnątrz podzapytania perspektywy CREATE VIEW Perspektywy tworzy się za pomocą polecenia CREATE VIEW: CREATE [OR REPLACE] VIEW nazwa [( kol1 [, kol2 typ]... )] AS SELECT... [WITH CHECK OPTION WITH READ ONLY]; CREATE OR REPLACE VIEW szefowie AS SELECT * FROM pracownicy WHERE nr_akt IN (SELECT kierownik FROM pracownicy CREATE VIEW studentki AS SELECT * FROM studenci WHERE imiona LIKE %A WITH CHECK OPTION; Sekwencje Sekwencje tworzy się za pomocą polecenia CREATE SEQUENCE: CREATE SEQUENCE nazwa [START WITH st] [INCREMENT BY i] [MAXVALUE max] [MINVALUE min] [CYCLE NOCYCLE] [CACHE c NOCACHE]; CREATE SEQUENCE nr_akt_seq START WITH 9200 INCREMENT BY 10; st min i st max i 0, może przyjmować wartości ujemne, i < (max min) c > 2, c (Ceil(max min)/abs(i)), domyślnie c = 20 nazwa.currval - określa aktualną wartość w sekwencji nazwa.nextval - określa następną wartość w sekwencji 11
Synonimy Synonimy tworzy się za pomocą polecenia CREATE SYNONYM: CREATE [PUBLIC] SYNONYM nazwa FOR [schemat.]nazwa_ob; CREATE PUBLIC SYNONYM pracownicy FOR scott.emp; 3 Perspektywy słownika danych Słownik danych Słownik danych zbiór tabel i perspektyw systemowych przechowujących informacje (metadane) na temat struktury bazy danych, zawartych w niej obiektów, kontach użytkowników, uprawnieniach, itp.. Użytkownicy mają jedynie możliwość oglądania zawartości perspektyw słownika danych w czytelnej formie. Przedrostki perspektyw słownika danych: USER_ - obiekty posiadane przez użytkownika ALL_ - obiekty, do których użytkownik ma dostęp DBA_ - obiekty całej bazy danych (informacje wykorzystywane w administracji) SELECT table_name FROM user_tables; Pespektywy słownika danych Wybrane perspektywy słownika danych dla tabel: %_TABLES, %_CONSTRAINTS, %_CONS_COLUMNS indeksów: %_INDEXES, %_IND_COLUMNS klastrów: %_CLUSTERS, %_CLU_COLUMNS perspektyw: %_VIEWS, %_UPDATABLE_COLUMNS sekwencji: %_SEQUENCES synonimów: %_SYNONYMS innych obiektów: %_CATALOG, %_DEPENDENCIES, %_ERRORS, %_LOCKS, %_OBJECTS, %_ROLES, %_SOURCE, %_TABLESPACES, %_TRIGGERS, %_TYPES,... 4 Źródła Źródła W wykładzie wykorzystano materiały: http://download.oracle.com/docs/cd/b10501_01/nav/sql_keywords.htm?remark= homepage M. Lentner, Oracle 9i Kompletny podręcznik użytkownika, PJWSTK - W-wa, 2003 http://wazniak.mimuw.edu.pl/index.php?title=bazy_danych Garcia-Molina, Ullman, Widom: Implementacja systemów baz danych, WNT 2003 12