(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 7: Relacje i ograniczenia integralnościowe Język definiowania danych - DDL (Data Definition Language)
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Tworzenie relacji polecenie CREATE TABLEpolecenie CREATE TABLE CREATE TABLE nazwa_relacji (nazwa_atrybutu 1 typ (rozmiar) [DEFAULT wartość_domyślna] [ [CONSTRAINT nazwa_ogr] ograniczenie_atr], nazwa_atrybutu 2 typ (rozmiar) [DEFAULT wartość_domyślna] nazwa_atrybutu 2 typ (rozmiar) [DEFAULT wartość_domyślna] [ [CONSTRAINT nazwa_ogr] ograniczenie_atr],.... [ [CONSTRAINT nazwa_ogr] ograniczenie_rel,...] ); CREATE TABLE nazwa_relacji (nazwa_atrybutu 1 typ (rozmiar) [DEFAULT wartość_domyślna] [ [CONSTRAINT nazwa_ogr] ograniczenie_atr], nazwa_atrybutu 2 typ (rozmiar) [DEFAULT wartość_domyślna] nazwa_atrybutu 2 typ (rozmiar) [DEFAULT wartość_domyślna] [ [CONSTRAINT nazwa_ogr] ograniczenie_atr],.... [ [CONSTRAINT nazwa_ogr] ograniczenie_rel,...] );
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Typy atrybutów relacji number,number, number(r),number(r), number(r,n)number(r,n) char(r)char(r) varchar2(r),varchar2(r), varchar(r)varchar(r) datedate longlong long rawlong raw
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Ograniczenia integralnościowe atrybutu ograniczenie_atrNULL NOT NULL UNIQUE PRIMARY KEY REFERENCES ON DELETE CASCADE CHECKograniczenie_atrNULL NOT NULL UNIQUE PRIMARY KEY REFERENCES ON DELETE CASCADE CHECKprzykład placa_dod number(6,2) placa_pod number(6,2) not null, nazwisko varchar2(12) unique numer number(4) primary key id_zesp number(4) references zespoly(id_zesp) id_zesp number(4) references zespoly(id_zesp) on delete cascade placa_pod number(6,2) check (placa_pod between 100 and 3000) (placa_pod between 100 and 3000)przykład placa_dod number(6,2) placa_pod number(6,2) not null, nazwisko varchar2(12) unique numer number(4) primary key id_zesp number(4) references zespoly(id_zesp) id_zesp number(4) references zespoly(id_zesp) on delete cascade placa_pod number(6,2) check (placa_pod between 100 and 3000) (placa_pod between 100 and 3000)
(c) 1999, Instytut Informatyki Politechniki Poznańskiej UNIQUEUNIQUE PRIMARY KEYPRIMARY KEY REFERENCESREFERENCES ON DELETE CASCADEON DELETE CASCADE CHECKCHECK FOREIGN KEY... REFERENCESFOREIGN KEY... REFERENCES Ograniczenia integralnościowe relacji Domyślna wartość atrybutu definiując atrybut możemy mu przypisać wartość domyślną, którą poprzedzamy słowem kluczowym DEFAULTdefiniując atrybut możemy mu przypisać wartość domyślną, którą poprzedzamy słowem kluczowym DEFAULT placa_pod number(6,2) DEFAULT 0
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Tworzenie relacji - przykład CREATE TABLE dydaktycy ( id_dydakt number(2) CONSTRAINT id_dydakt_pk PRIMARY KEY, nazwisko varchar2(15) NOT NULL, tytuł varchar2(10) NOT NULL); CREATE TABLE przedmioty ( id_przedm number(2) CONSTRAINT id_przedm_pk PRIMARY KEY, nazwa varchar2(15) NOT NULL); CREATE TABLE dydaktycy ( id_dydakt number(2) CONSTRAINT id_dydakt_pk PRIMARY KEY, nazwisko varchar2(15) NOT NULL, tytuł varchar2(10) NOT NULL); CREATE TABLE przedmioty ( id_przedm number(2) CONSTRAINT id_przedm_pk PRIMARY KEY, nazwa varchar2(15) NOT NULL);
(c) 1999, Instytut Informatyki Politechniki Poznańskiej CREATE TABLE zajęcia ( id_zajeć number(2) CONSTRAINT id_zajeć_pk PRIMARY KEY, rodzaj_zaj varchar2(15) CONSTRAINT rodzaj_zaj_chk CHECK (rodzaj_zaj in ('wykład', 'ćwiczenia', 'laboratorium', 'projekt' )), id_dydakt number(2) NOT NULL, id_przedm number(2) NOT NULL, foreign key (id_dydakt) REFERENCES dydaktycy(id_dydakt) ON DELETE CASCADE, foreign key (id_przedm) REFERENCES przedmioty(id_przedm) ); CREATE TABLE zajęcia ( id_zajeć number(2) CONSTRAINT id_zajeć_pk PRIMARY KEY, rodzaj_zaj varchar2(15) CONSTRAINT rodzaj_zaj_chk CHECK (rodzaj_zaj in ('wykład', 'ćwiczenia', 'laboratorium', 'projekt' )), id_dydakt number(2) NOT NULL, id_przedm number(2) NOT NULL, foreign key (id_dydakt) REFERENCES dydaktycy(id_dydakt) ON DELETE CASCADE, foreign key (id_przedm) REFERENCES przedmioty(id_przedm) ); Tworzenie relacji - przykład cd.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Słownik bazy danych opis zdefiniowanych ograniczeń integralnościowychopis zdefiniowanych ograniczeń integralnościowych –USER_CONSTRAINTS –USER_CONS_COLUMNS opis zdefiniowanych relacjiopis zdefiniowanych relacji –USER_TABLES select table_name from USER_TABLES; opis atrybutów relacjiopis atrybutów relacji –USER_TAB_COLUMNS schemat relacji wyświetlamy za pomocą polecenia DESCRIBE nazwa_relacjischemat relacji wyświetlamy za pomocą polecenia DESCRIBE nazwa_relacji
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Tworzenie relacji cd. CREATE TABLE AS SELECTCREATE TABLE AS SELECT CREATE TABLE nazwa_relacji [(nazwa atrybutu [null|not null],...)] AS SELECT klauzula_SELECT; CREATE TABLE nazwa_relacji [(nazwa atrybutu [null|not null],...)] AS SELECT klauzula_SELECT; CREATE TABLE lista_plac AS SELECT nazwisko, placa_pod FROM pracownicy; CREATE TABLE lista_plac AS SELECT nazwisko, placa_pod FROM pracownicy;
(c) 1999, Instytut Informatyki Politechniki Poznańskiej ALTER TABLE relacja ADD (nazwa_atrybutu typ (rozmiar) [DEFAULT wartość_domyślna] [[constraint nazwa_ogr] ograniczenie_atr] ); ALTER TABLE relacja ADD (nazwa_atrybutu typ (rozmiar) [DEFAULT wartość_domyślna] [[constraint nazwa_ogr] ograniczenie_atr] ); Modyfikowanie schematu relacji ALTER TABLE pracownicy ADD (tytuł_nauk VARCHAR2(10) ); ALTER TABLE pracownicy ADD (tytuł_nauk VARCHAR2(10) ); dodanie atrybutudodanie atrybutu
(c) 1999, Instytut Informatyki Politechniki Poznańskiej ALTER TABLE relacja MODIFY (atrybut typ (rozmiar) [default wartość_domyślna] [ null|not null] ); ALTER TABLE relacja MODIFY (atrybut typ (rozmiar) [default wartość_domyślna] [ null|not null] ); Modyfikowanie schematu relacji cd. ALTER TABLE pracownicy MODIFY (tytuł_nauk varchar2(15) DEFAULT mgr inż. NOT NULL); ALTER TABLE pracownicy MODIFY (tytuł_nauk varchar2(15) DEFAULT mgr inż. NOT NULL); modyfikowanie definicji atrybutumodyfikowanie definicji atrybutu
(c) 1999, Instytut Informatyki Politechniki Poznańskiej ALTER TABLE relacja DROP atrybut; ALTER TABLE relacja DROP atrybut; Modyfikowanie schematu relacji cd. ALTER TABLE pracownicy DROP tytuł_nauk; ALTER TABLE pracownicy DROP tytuł_nauk; usuwanie atrybutu ( >= Oracle )usuwanie atrybutu ( >= Oracle )
(c) 1999, Instytut Informatyki Politechniki Poznańskiej ALTER TABLE relacja ADD ([constraint nazwa_ogr] ograniczenie_rel); ALTER TABLE relacja ADD ([constraint nazwa_ogr] ograniczenie_rel); ALTER TABLE pracownicy ADD (CONSTRAINT etat_chk CHECK (etat IN ('DYREKTOR', 'PROFESOR', 'ADIUNKT', 'ASYSTENT', 'STAŻYSTA', 'SEKRETARKA') ) ); 'ASYSTENT', 'STAŻYSTA', 'SEKRETARKA') ) ); ALTER TABLE pracownicy ADD (CONSTRAINT etat_chk CHECK (etat IN ('DYREKTOR', 'PROFESOR', 'ADIUNKT', 'ASYSTENT', 'STAŻYSTA', 'SEKRETARKA') ) ); 'ASYSTENT', 'STAŻYSTA', 'SEKRETARKA') ) ); Modyfikowanie schematu relacji cd. ALTER TABLE pracownicy ADD (CONSTRAINT prac_fk FOREIGN KEY (id_zesp) REFERENCES zespoly(id_zesp ) ); ALTER TABLE pracownicy ADD (CONSTRAINT prac_fk FOREIGN KEY (id_zesp) REFERENCES zespoly(id_zesp ) ); dodanie ograniczenia integralnościowego relacjidodanie ograniczenia integralnościowego relacji
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Zarządzanie ograniczeniami integralnościowymi włączenie ograniczenia integralnościowegowłączenie ograniczenia integralnościowego wyłączenie ograniczenia integralnościowegowyłączenie ograniczenia integralnościowego ALTER TABLE relacja ENABLE rodzaj_ogr; ALTER TABLE relacja ENABLE rodzaj_ogr; ALTER TABLE relacja ENABLE CONSTRAINT nazwa_ogr; ALTER TABLE relacja ENABLE CONSTRAINT nazwa_ogr; ALTER TABLE relacja DISABLE rodzaj_ogr; ALTER TABLE relacja DISABLE rodzaj_ogr; ALTER TABLE relacja DISABLE CONSTRAINT nazwa_ogr; ALTER TABLE relacja DISABLE CONSTRAINT nazwa_ogr; ALTER TABLE pracownicy ENABLE CONSTRAINT prac_fk; ALTER TABLE pracownicy ENABLE CONSTRAINT prac_fk; ALTER TABLE pracownicy DISABLE PRIMARY KEY; ALTER TABLE pracownicy DISABLE PRIMARY KEY;
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Zarządzanie ograniczeniami integralnościowymi cd. usunięcie ograniczenia integralnościowegousunięcie ograniczenia integralnościowego ALTER TABLE relacja DROP rodzaj_ogr [CASCADE]; ALTER TABLE relacja DROP rodzaj_ogr [CASCADE]; ALTER TABLE relacja DROP CONSTRAINT nazwa_ogr [CASCADE]; ALTER TABLE relacja DROP CONSTRAINT nazwa_ogr [CASCADE]; ALTER TABLE pracownicy DROP CONSTRAINT etat_chk; ALTER TABLE pracownicy DROP CONSTRAINT etat_chk; ALTER TABLE pracownicy DROP PRIMARY KEY CASCADE; ALTER TABLE pracownicy DROP PRIMARY KEY CASCADE;
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Zmiana nazwy relacji RENAME stara_nazwa TO nowa_nazwa; Usuwanie relacji DROP TABLE nazwa_relacji [CASCADE CONSTRAINTS]; PRACOWNICYZESPOLY REFERENCES zespoly(id_zesp) DROP TABLE zespoly CASCADE CONSTRAINTS;
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Komentarze każda relacja jak również każdy z atrybutów relacji może być opatrzony komentarzem w bazie danychkażda relacja jak również każdy z atrybutów relacji może być opatrzony komentarzem w bazie danych nadawanie komentarzy realizowane jest przez polecenia:nadawanie komentarzy realizowane jest przez polecenia: comment on table nazwa_relacji is komentarz do relacji' miejsce przechowywania komentarzymiejsce przechowywania komentarzy –USER_TAB_COMMENTS –USER_COL_COMMENTS comment on column nazwa_relacji.nazwa_atrybutu is komentarz do atrybutu relacji'