Βάσεις Δεδομένων (Databases) ΕΠΛ 342 Χειμερινό Εξάμηνο 2011 Διδάσκοντες Καθηγητές Γιώργος Σαμάρας (ΧΩΔ01 109)
Δημιουργία Πεδίων Ορισμού Πεδίο Ορισμού είναι συστατικό του σχήματος για τον ορισμό των μακροεντολών (macros) των τύπων δεδομένων (datatype) Βασικοί τύποι δεδομένων DEFAULT (προκαθορισμένη τιμή) CHECK (συνθήκες εγκυρότητας) Παραδείγματα: CREATE DOMAIN name_dom AS CHAR(20); CREATE DOMAIN sectno_dom AS SMALLINT; CREATE DOMAIN section_dom VARCHAR(20) DEFAULT 'none'; CREATE DOMAIN address_dom CHAR(50) DEFAULT NULL; CREATE DOMAIN qpa_dom DECIMAL (3,2) DEFAULT 0.00;
Δημιουργία Πεδίων Ορισμού CREATE DOMAIN gender_dom AS CHAR(1) CHECK (VALUE IN ( 'F', 'f', 'M', 'm' )); CREATE DOMAIN gender_dom AS CHAR(1) CHECK (VALUE IN ( 'F', 'f', 'M', 'm' ) OR (VALUE IS NULL)); CREATE DOMAIN ssn_dom CHAR(11) CHECK ((VALUE BETWEEN '000-00-0000' AND '999-99-9999')); CREATE DOMAIN hour_dom AS INTEGER DEFAULT 0 CHECK (VALUE >= 0);
Συναλλαγές (TRANSACTIONS) Μια συναλλαγή είναι μια σειρά από εντολές αναζήτησης και ενημερώσεων που χρειάζεται να εκτελεστούν σαν σύνολο (ατομικότητα) για την διατήρηση της συνέπειας της βάσης Βασικές εντολές συναλλαγών: SET TRANSACTION READ WRITE; (SQL1: DECLARE TRANSACTION READ WRITE;) SET TRANSACTION READ ONLY; (SQL1: DECLARE TRANSACTION READ ONLY;) COMMIT ; ROLLBACK; ROLLBACK εξ ορισμού λειτουργία
Περιορισμοί στα χαρακτηριστικά Περιορισμοί: NOT NULL DEFAULT (προκαθορισμένη τιμή) Χωρίς το DEFAULT-clause, η εξ ορισμού τιμή είναι η NULL PRIMARY KEY (λίστα χαρακτηριστικών) UNIQUE (λίστα χαρακτηριστικών) επιτρέπει τον ορισμό εναλλακτικών κλειδιών FOREIGN KEY (κλειδί) REFERENCES table (κλειδί) Χρόνος των περιορισμών επιβολής (Constraints Enforcement): Μη αναβαλλόμενο (Άμεσο) [εξ ορισμού] Αναβαλλόμενο μέχρι την ώρα του commit (DEFERRABLE) Ονοματολογία των περιορισμών στους πίνακες [Δεσμευμένη λέξη CONSTRAINT]: Διευκόλυνση στην σύνταξη Χρησιμοποιείτε για αναφορά λαθών (error reporting)
CREATE TABLE SECTION(SNO, Sname, Head) CREATE TABLE SECTION /* or Micro_db.SECTION */ ( SNO INTEGER, Sname sect_dom CONSTRAINT Sname_Not_Null NOT NULL NOT DEFERRABLE, Head ssn_dom, CONSTRAINT Section_PK PRIMARY KEY (SNO) DEFERRABLE, CONSTRAINT Section_FK1 FOREIGN KEY (Head) REFERENCES LIBRARIAN (SSN) DEFERRABLE, CONSTRAINT Section_UN UNIQUE ( Sname ) DEFERRABLE );
Εντολές Ενεργοποίησης Αναφοράς Ενεργοποιούνται (triggered) αν παραβιαστεί ένας αναφορικός περιορισμός Λειτουργίες SET NULL CASCADE (propagate λειτουργία) SET DEFAULT Ενέργειες που καλούν την triggering συνθήκη: ON DELETE ON UPDATE
CREATE TABLE CREATE TABLE LIBRARIAN /* or Micro_db.LIBRARIAN */ ( Name name_dom NOT NULL, SSN ssn_dom NOT NULL, Section INTEGER, Address address_dom, Gender gender_dom, Birthday DATE, Salary DEC(8,2) DEFAULT 0.0 CHECK(Salary >= 0), PRIMARY KEY (SSN) DEFERRABLE, FOREIGN KEY (Section) REFERENCES SECTION (SNO) On Delete SET DEFAULT On Update CASCADE DEFERRABLE );
Διαγραφή ενός Πίνακα DROP TABLE <db-name> [RESTRICT CASCADE]; Restrict: Διαγράφει τον πίνακα να δεν αναφέρετε πουθενά Cascade: Διαγράφει τον πίνακα και όλες τις αναφορές του Παραδείγματα: DROP TABLE LIBRARIAN CASCADE; DROP TABLE LIBRARIAN RESTRICT;
Διαγραφή Πεδίων Ορισμού DROP DOMAIN <dname> [RESTRICT CASCADE]; Restrict: αφαιρεί πεδία ορισμού που δεν χρησιμοποιούνται Cascade: αφαιρεί πεδία ορισμού και αντικαθιστά όλες τις εμφανίσεις τους με υποκείμενα datatype Παραδείγματα: CREATE DOMAIN gender_dom AS CHAR(1) CHECK (VALUE IN ( 'F', 'f', 'M', 'm' ) OR (VALUE IS NULL)); DROP DOMAIN gender_dom CASCADE; gender gender_dom gender char(1)
Εξέλιξη Σχήματος Πινάκων Η ALTER εντολή επιτρέπει την αλλαγή του πεδίου ορισμού ενός χαρακτηριστικού, προσθέτει και αφαιρεί ένα χαρακτηριστικό ή περιορισμό ALTER TABLE table-name ALTER [COLUMN] Αλλαγή πεδίου ορισμού ενός χαρακτηριστικού Π.χ., ALTER TABLE Student ALTER QPA DECIMAL(4,2); Προσοχή: Είναι πιθανοί περιορισμοί τύπωσης όπως στην C/C++ Ορίζει ή αφαιρεί την εξ ορισμού τιμής ενός χαρακτηριστικού Π.χ.1, ALTER TABLE DEPENDENT ALTER COLUMN kinship DROP DEFAULT; Π.χ.2, ALTER TABLE SECTION ALTER Head SET DEFAULT NULL;
Τροποποίηση Σχήματος Πινάκων ALTER TABLE table-name ADD [COLUMN] ALTER TABLE DEPENDENT ADD Gender gender_dom; ALTER TABLE tbl-name DROP [COLUMN] [Option] CASCADE επιλογή ALTER TABLE SECTION DROP COLUMN Head CASCADE; RESTRICT επιλογή (εξ ορισμού) ALTER TABLE SECTION DROP Head RESTRICT; Παράδειγμα μιας προσθήκης/διαγραφής Περιορισμού?
Προσθήκη και Αφαίρεση Περιορισμού CREATE TABLE DEPENDENT ( LSSN ssn_dom, Name name_dom CONSTRAINT Name_Not_Null NOT NULL, Birthday DATE, Kinship CHAR(5) CONSTRAINT Kin_None DEFAULT 'none', CONSTRAINT DEPENDENT_PK PRIMARY KEY (LSSN, Name) DEFERRABLE ); ALTER TABLE DEPENDENT DROP CONSTRAINT Name_Not_Null ; ALTER TABLE DEPENDENT ADD CONSTRAINT DEP_FK FOREIGN KEY (LSSN) REFERENCES LIBRARIAN (SSN) DEFERRABLE;