ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚ. ΜΗΧ. ΚΑΙ ΜΗΧ. ΥΠΟΛΟΓΙΣΤΩΝ ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ ΚΕΦΑΛΑΙΟ 3 SQL-3-1 ΕΙΣΑΓΩΓΗ: Τα τμήματα της SQL-3 SQL/Framework SQL/Foundation SQL/PSM (Persistent Stored Modules) SQL/CLI (Call Level Interface) SQL/Object SQL/Bindings SQL/Transaction SQL/Temporal - 2 1
SQL/Framework Παρέχει μια γενική εικόνα του στάνταρτ Παρουσιάζει πώς τα διάφορα τμήματα δένουν μεταξύ τους Παρέχει ένα κοινό λεξιλόγιο - ορολογία - 3 SQL/Foundation Νέα στοιχεία στην SQL: τύποι δεδομένων κατηγορήματα (predicates) σχεσιακός τελεστής δυνατότητες δοσοληψιών triggers user-defined types και πολλά άλλα... - 4 2
SQL/CLI (Call Level Interface) επιτρέπει την εκτέλεση κώδικα χωρίς να παρέχεται ο πηγαίος κώδικας λειτουργία χωρίς preprocessor είναι ένα είδος binding σαν την dynamic SQL και το ODBC - 5 SQL/PSM (Persistent Stored Modules) επιτρέπει το διαχωρισμό των εφαρμογών σε client και server stored modules SQL routines 3GL external routines υπολογιστικά πλήρης! - 6 3
SQL/Bindings dynamic SQL βελτιώσεις στην embedded SQL - 7 SQL/Transaction εξειδίκευση του ΧΑ τυποποιεί ένα ΧΑ interface για υλοποιήσεις SQL - 8 4
SQL/Temporal προσθέτει χρονικά χαρακτηριστικά στα δεδομένα βασίζεται κυρίως στην TSQL-2-9 SQL/Object προσθέτει αντικειμενοστρεφή χαρακτηριστικά στο σχεσιακό μοντέλο named rows reference type πιο αναλυτικά στη συνέχεια... - 10 5
SQL/Foundation - τύποι δεδομένων BOOLEAN LOB (Large Object) αποθηκεύεται στη βάση δεδομένων character ή binary LOB LOCATOR - για τη διαχείριση των LOBs επιτρέπει την πρόσβαση σε τμήματα των LOBs επιτρέπει την καλύτερη εκτέλεση λειτουργιών σε LOBs - 11 SQL/Foundation - κατηγορήματα SIMILAR (x SIMILAR TO pattern) BOOLEAN (expression IS FALSE/TRUE/UNKNOWN) Type predicate - στη συνέχεια... - 12 6
SQL/Foundation - σχεσιακός τελεστής WITH RECURSIVE query_name (col-list) AS (query expression) [search clause] [limit clause] query expression WITH RECURSIVE parts(outer, inner) AS (SELECT outer, inner FROM p_table WHERE outer= P1 UNION ALL SELECT p_table(outer), p_table(inner) FROM parts, p_table WHERE p_table.outer = parts.inner) SELECT * from parts - 13 SQL/Foundation - transactions START TRANSACTION (READ ONLY/READ WRITE) SET LOCAL TRANSACTION για transactions σε παραπάνω από ένα server CHAINED TRANSACTIONS COMMIT/ROLLBACK AND CHAIN SAVEPOINTS ROLLBACK TO SAVEPOINT name - 14 7
SQL/Foundation - ασφάλεια Ρόλοι: λειτουργούν σαν τα δικαιώματα CREATE ROLE payroll GRANT select ON emp TO payroll GRANT payroll TO john - 15 SQL/Foundation - triggers (1) Γεγονότα: INSERT/DELETE/UPDATE Χρόνος που συμβαίνουν: BEFORE/AFTER Συνθήκη: οποιαδήποτε SQL συνθήκη Πράξη: οποιαδήποτε SQL εντολή - 16 8
SQL/Foundation - triggers (2) δυνατότητα προσπέλασης παλιών και νέων τιμών των επηρρεαζόμενων rows οι κανόνες ελέγχονται είτε ανά γεγονός, είτε ανά row CREATE TRIGGER new_hire AFTER INSERT ON emps REFERENCING NEW AS n UPDATE corp_status SET no_of_emps = no_of_emps + 1 WHERE n.corp_id = corp.id; - 17 SQL/Foundation - SQL client modules (1) modules που βρίσκονται στους clients περιέχουν ρουτίνες γραμμένες σε καθαρή SQL που μπορούν να κληθούν από άλλες γλώσσες οι παράμετροι πρέπει να έχουν αντίστοιχο τύπο στις εξωτερικές γλώσσες - 18 9
SQL/Foundation - SQL client modules (2) MODULE trxn LANGUAGE C AUTHORIZATION admin PROCEDURE get_balance (SQLCODE, :acct INTEGER, :bal REAL); SELECT balance INTO :bal FROM accounts WHERE account = :acct; main ( ) { long SQLCODE; long acct_no; real bal;... get_balance (&SLQCODE, acct_no, bal);... - 19 SQL/PSM (Persistent Stored Modules) modules αποθηκευμένα στον server πολίτες α κατηγορίας στο σχήμα μιας βάσης υπολογιστικά πλήρης γλώσσα! Δύο ειδών routines: SQL routines external routines - 20 10
SQL/PSM -SQL Routines compound statement BEGIN END; variable declaration DECLARE var CHAR (6) if statement IF subject (var) <> urgent THEN ELSE ; case statement CASE subject (var) WHEN SQL THEN WHEN ; loop statement LOOP <SQL statements list> END LOOP; statement WHILE i < 100 DO END WHILE; repeat statement REPEAT UNTIL i<100 END REPEAT; of statement FOR result AS DO END FOR; leave statement LEAVE ; return statement RETURN urgent ; call statement CALL procedure_x (1, 3, 5,); assignment statement SET x = abc ; signal / resignal SIGNAL division_by_zero - 21 SQL/PSM - External routines γραμμένες σε οποιαδήποτε host γλώσσα μπορούν να περιέχουν embedded SQL CREATE FUNCTION sin (FLOAT) RETURNS FLOAT EXTERNAL NAME LIB%MATH-SUBS\SINE LANGUAGE FORTRAN... - 22 11
SQL/CLI (Call Level Interface) επιτρέπει την εκτέλεση κώδικα χωρίς να παρέχεται ο πηγαίος κώδικας λειτουργία χωρίς preprocessor είναι ένα είδος binding σαν την dynamic SQL και το ODBC, δηλαδή ένα functional interface στη βάση δεδομένων - 23 SQL/CLI - είδη συναρτήσεων σύνδεση στο server allocation/deallocation πόρων εκτέλεση SQL εντολών διαγνωστικά διαχείριση transactions διάφορες βοηθητικές συναρτήσεις - 24 12
SQL/CLI - τυπική ακολουθία εντολών AllocEnv() AllocConnect() Connect() AllocStmt() build the statement Execute() -repeat as required... Transact() -repeat as required... FreeStmt() Disconnect() FreeConnect() FreeEnv() - 25 Νέες δυνατότητες σε cursors Holdable cursors πρόταση WITH HOLD διατηρεί την θέση μετά από commit... αλλά απαιτεί νέο FETCH για να τοποθετηθεί στην προηγούμενη θέση μετά από UPDATE ή DELETE δεν παραμένει μετά από ROLLBACK SENSITIVE cursors Σε αντίθεση με unspecified και INSENSITIVE - 26 13
Νέες δυνατότητες για transactions START TRANSACTION δήλωση SET LOCAL TRANSACTION δήλωση Αλυσιδωτές δοσοληψίες(chained) Savepoints - 27 START TRANSACTION Σύνταξη START TRANSACTION mode... Οι επιλογές για το mode είναι ίδιες όπως στη δήλωση SET TRANSACTION READ ONLY/READ WRITE ISOLATION LEVEL DIAGNOSTICS SIZE Παράδειγμα: START TRANSACTION READ WRITE ISOLATION SERIALIZABLE - 28 14
SET LOCAL TRANSACTION Θέτει επιλογές μόνο για το τοπικό μέρος μιας multi-site δοσοληψίας Χρησιμοποιείται όταν η δοσοληψία επεκτείνεται σε διαφορετικούς SQL-servers(χρήση CONNECT και SET CONNECTION) Πιθανές βελτιστοποιήσεις περιλαμβάνουν τα local-read branches από τις read-write δοσοληψίες - 29 Αλυσιδωτές δοσοληψίες Μια νέα δοσοληψία ξεκινά αυτόματα με το τελείωμα της προηγούμενης Υπάρχουν πανομοιότυπα χαρακτηριστικά με την προηγούμενη(δεν μπορούμε να ορίσουμε SET TRANSACTION) Καλείται μέσω: COMMIT AND CHAIN ή ROLLBACK AND CHAIN - 30 15
Savepoints Σημειώνει ένα μέρος σε μια δοσοληψία για να επιτρέψει partial rollback της εργασίας Μοντελοποιείται σαν φωλιασμένες υποδοσοληψίες Εγκαθίσταται με τη δήλωση: SAVEPOINT name Χρησιμοποιείται με τις δηλώσεις: RELEASE SAVEPOINT name ή ROLLBACK TO SAVEPOINT name - 31 Object Relational Επεκτάσεις στην SQL(SQL/Object, SQL/Foundation) User Defined Types Type Predicate User Defined Functions & Procedures Collection Types - 32 16
User Defined Types Distinct Types Abstract Data Types (ADTs) Row Types / Reference Types - 33 User-defined Types - Distinct Types (1) Η πιο απλή μορφή User Defined Types βασίζεται στην name equivalence ουσιαστικά ένας renamed type, συνήθως με διαφορετική συμπεριφορά από τον source type με τον οποίο έχουν ίδια εσωτερική δομή δεν είναι, όμως, συγκρίσιμοι λειτουργίες ορισμένες στους distinct types system-provided τελεστές σύγκρισης (προαιρετικά) ο ορισμός τους βασίζεται στον τελεστή του source type casting άμεσο casting μεταξύ του distinct type και του source type - 34 17
User-defined Types - Distinct Types (2) CREATE DISTINCT TYPE CDN_DOLLAR AS DECIMAL (9.2) CREATE DISTINCT TYPE US_DOLLAR AS DECIMAL (9.2) CREATE TABLE SALES (ID INTEGER, US US_DOLLAR, CDN CDN_DOLLAR) SELECT * FROM SALES WHERE CDN > US => fails!!!!! SELECT * FROM SALES WHERE CDN > CDN_DOLLAR(US) =>O.K!!!!! - 35 User-defined Types - Abstract Data Types (ADTs) named, user-defined data types με συμπεριφορά και ενθυλακωμένη (encapsulated) εσωτερική δομή η εσωτερική δομή ορίζεται σε SQL CREATE TYPE address (street char (30), city char (20), state char (2), zip integer); - 36 18
ADTs - Ενθυλάκωση (Encapsulation) Ενθυλάκωση η πρόσβαση στα attributes του ADT περιορίζεται σε functions, που ορίζουν το ορατό (visible) interface δεν υπάρχει διάκριση μεταξύ functions, stored, και virtual attributes του interface η φυσική αναπαράσταση μπορεί να αλλάξει χωρίς να επηρρεαστούν οι εφαρμογές OBSERVER και MUTATOR functions δημιουργούνται αυτόματα street (address)->char(30) city (address)->char(20) state (address)->char(2) zip (address)->integer street (address, char(30)) -> address city (address, char(20)) -> address state (address, char(2)) -> address zip (address, integer) -> address - 37 ADTs - Δημιουργία Στιγμιοτύπων μέσω της constructor function default CONSTRUCTOR function δημιουργείται αυτόματα Η κλήση address () -> address επιστρέφει ένα νέο στιγμιότυπο του ADT με κάθε attribute αρχικοποιημένο στην default τιμή - 38 19
ADTs -Κληρονομικότητα Οι ADTs κληρονομούν attributes και συμπεριφορά (functions) από τους υπερτύπους τους Υποστηρίζεται η πολλαπλή κληρονομικότητα shape point line polygon CREATE TYPE shape CREATE TYPE point UNDER shape CREATE TYPE line UNDER shape CREATE TYPE polygon UNDER shape - 39 ADTs - Χρήση CREATE TYPE shape (refercing_system INTEGER tolerance DECIMAL (8.2) geometry BLOB (1M)) CREATE TABLE real_estate_info (address address, price money, owner char (40), property shape); UPDATE real_estate_info SET price = US_dollar (0.9 x amount (price)) WHERE within_distance (property..geometry, point (5, 5), miles (10)) SELECT D_mark (price), owner FROM real_estate_info WHERE overlaps (property..geometry, square (5, 5, 25, 25)) - 40 20
ADTs - Substitutability CREATE TABLE real_estate_info (price money owner CHAR (40) property shape) INSERT INTO real_estate_info VALUES (US_dollar (100000), Mr. S. White, point (4, 4)) INSERT INTO real_estate_info VALUES (CDN_dollar (400000), Mr. W. Green, poly (point (4, 4), point (10, 10), point (12, 14))) INSERT INTO SALES VALUES (S_frank (150000), Mrs. D. Black, line (5, 5, 7, 8)) table real_estate_info type p r ic e o w n e r p r o p e r ty tags < u s_ d o lla r> < p o in t> am ount: 100,000 M r. S. W hite < c d n _ d o lla r> < p o ly > a m o u n t:4 0 0,0 0 0 M r. W. G reen < sw iss_franc> < lin e > am o u n t: 1 5 0,0 0 0 M r. D. B la ck - 41 ADTs - Late Binding SELECT owner, dollar_amount (price) FROM real_estate_info WHERE dollar_amount (price) < US_dollar (500000) θα καλέσει διαφορετική function στο runtime, ανάλογα με τον τύπο χρήματος που αποθηκεύτηκε στη στήλη PRICE (US_dollar, CDN_dollar, D_mark, S_frank, ) - 42 21
User Defined Types - Named Row Types Row type: user-defined data type με μη ενθυλακωμένη εσωτερική δομή CREATE ROW TYPE account_t (acctno INT, cust REF (customer_t), type CHAR (1), opened DATE, rate DOUBLE PRECISION, balance DOUBLE PRECISION); για να ορίζουν τον τύπο των rows σε ένα πίνακα CREATE TABLE account OF account_t (PRIMARY KEY acctno ); - 43 User Defined Types - Reference types (1) διευκολύνουν τη μοντελοποίηση συσχετίσεων μεταξύ row types CREATE ROW TYPE account_t (acctno INT, cust REF (customer_t), type CHAR (1), opened DATE, rate DOUBLE PRECISION, balance DOUBLE PRECISION); - 44 22
User Defined Types - Reference Types (2) τα references μπορούν να έχουν scope CREATE TABLE account OF account_t (PRIMARY KEY acctno, SCOPE FOR cust IS customer); μόνο top level rows σε πίνακες tables μπορούν να γίνουν referenced η reference value ποτέ δεν αλλάζει, όσο τα αντίστοιχα tuples ζουν οι reference values είναι μοναδικές μέσα στη βάση δεδομένων - 45 User Defined Types - Path Expressions Τα references μπορούν να χρησιμοποιηθούν σε path expressions SELECT a. acctno, a. cust-> name FROM account a WHERE a. cust-> address..city = Hollywood AND a. balance > 1000000; - 46 23
User Defined Types - Row Types: Subtyping Ένας row type μπορεί να είναι υποτύπος ενός ή περισσότερων row types, κληρονομώντας attributes και συμπεριφορά από αυτούς CREATE TYPE empoloyee (name CHAR (20), salary DECIMAL (10,2)) CREATE TYPE manager UNDER employee (bonus DEMICAL (10,2)) CREATE TYPE ssummer_stundent UNDER employee (school VARCHAR (30)) - 47 User Defined Types - Row Types: Τable Hierarchies για τη μοντελοποίηση ιεραρχιών πινάκων (super/sub collections) CREATE TABLE employees OF employee CREATE TABLE managers OF manager UNDER employees CREATE TABLE summer_stundents OF summer_stundents UNDER employees queries στις ιεραρχίες επιστρέφουν rows από τα subtables - 48 24
Type Predicate CREATE TABLE real_estate_info (price money, owner CHAR (40), property real_estate) price owner property <us_dollar> <real_estate> amount: 100,000 Mr. S. White rooms: 4 size: <cdn_dollar> <house> amount: 400,000 Mr. W. Green rooms: 10 size: <swiss_franc> <condo> amount: 150,000 Mrs. D. Black rooms: 5 size: - 49 Type Predicate -Subtype Specification late binding SELECT price, owner, property FROM real_estate_info WHERE TYPE (price) IN (us_dollar) αλλαγή του τύπου μιας έκφρασης σε έναν από τους subtypes του SELECT TREAT (price AS us_dollar), owner, property FROM real_estate_info WHERE TYPE (price) IN (us_dollar) - 50 25
User Defined Functions -Methods user-defined functions ή/και stored procedures ορισμένες σε user-defined types (ADTs, row types, κλπ.) μπορούν να γραφούν σε SQL/PSM, 3GLs, ή 4GLs internal/external - 51 Collection Types (1) SETs, LISTs, BAGs, and ARRAYs CREATE ROW TYPE employee (id INTEGER, name VARCHAR(30), address address, manager REF (employee), projects SET (REF (project)), children LIST (REF (PERSON)), hobbies SET (VARCHAR (20))) - 52 26
Collection Types (2) στιγμιότυπα των SETs, MULTISETs, ARRAYs μπορούν να αντιμετωπισθούν σαν πίνακες στα queries SELECT e. name FROM employees e WHERE travel IN (SELECT * FROM TABLE (e. hobbies) c) AND 5 > (SELECT count (*) FROM TABLE (e. children) d) το τελικό αποτέλεσμα είναι πάντα πίνακας - 53 Collections - Παράδειγμα CREATE TABLE employees CREATE TABLE departments (id INTEGER PRIMARY KEY, (deptno INTEGER PRIMARY KEY, name VARCHAR (30), manager INTEGER REFERENCES employees, address ROW (street VARCHAR (40), projects TABLE (projno INTEGER, city CAHR (20), projname CHAR (30), state CHAR (2) budget DECIMAL (10,2)) zip INTEGER, country VARCHAR (30)), salary DECIMAL (10,2), deptno INTEGER REFERENCES departments, manager INTEGER RFEFERENCES employees, projects SET (INTEGERS), children LIST (person), hobbies SET (VARCHAR (20))) - 54 27
Μετασχηματισμός collections σε πίνακες find all employees that work on more than 5 projects SELECT name FROM employees e WHERE 5 < (SELECT count (*) FROM TABLE (e. projects) d) - 55 Μετασχηματισμός πινάκων σε collections find the set of employees that are not managers SET ( TABLE employees EXCEPT (SELECT * FROM employees e WHERE e.id IN (SELECT ee. manager FROM employees ee))) - 56 28
Queries σε collections BEGIN DECLARE hobbies_var SET (VARCHAR (20)); SELECT hobbies INTO hobbies_var FROM name = John Doe ; SELECT ITEM ROW h FROM h IN hobbies_var /* hobbies_var is a SET of VARCHARs */ WHERE h <= A ; SELECT ITEM ROW h FROM h IN hobbies_var /* quantifiers are allowed */ WHERE FOR SOME j IN (SELECT hobbies FROM employees e WHERE name = Mary Doe ) (h = j); END; - 57 Unnesting (1) find the children of employees making less than 50K SELECT child FROM employees e, TABLE (e. children) c (child) WHERE e. salary < 50000 return the name the children of employees living in CA SELECT c. name, c. birthday FROM employees e, TABLE (e. children) WITH ORDINALITY c (name, birthday, order) WHERE e. address..state = CA ORDER BY c. order - 58 29
Unnesting (2) return the number, budget, and average salary of every department SELECT d. deptno, d. budget, av. avg_sal FROM departments d, (SELECT avg (salary) AS avg_sal FROM e. deptno = d. deptno) AS av ή όμοια SELECT d. deptno, d. budget. AVG (e. salary) AS avg_sal FROM departments d, employees e WHERE d. deptno = e. deptno GROUP BY d. deptno, d. budget - 59 Flattening των αποτελεσμάτων return the set of hobbies of employee 12345 THE ( SELECT e. hobbies /* does not return ROW (SET (VARCHAR))) */ FROM employees e WHERE e. id. = 12345) - 60 30
Άλλα Παραδείγματα (1) Find employees whose manager lives at a given address: select e.id from employees as e where row (row (123, University Avenue, Palo Alto, CA, 94301)) = (select mgr. address from employees as mgr. where e. manager = mgr.id) Find the managers and project details for projects with budgets > 10000. select d.manager, multiset (select * from table (d.projects) as p where p.budget >100000) from departments as d - 61 Άλλα Παραδείγματα (2) Find which of the addresses addr.1_v, addr.2_v, addr.3_v is near to 123, University Avenue, Palo Alto, CA, 94301 (given a Booleam function near). select row addr from (values addr1_v, addr2_v, addr3_v) as addr where near (row addr, row (123 University Avenue, Palo Alto, CA 94301)) ή όμοια select row addr from (multiset ( addr1_v, addr2_v, addr3_v)) as addr where near (row addr, row (123 University Avenue, Palo Alto, CA 94301)) - 62 31
Άλλα Παραδείγματα (3) Find the employee number and the numbers of projects they work on that are primers, given a function prime. select e.id, multiset ( from employees as e select pno from table (e. projects) as p(pno) where prime (pno) ) Find all details of employees that work on project 19. select * from employees as e where 19 in (select * from table (e.projects)) - 63 Άλλα Παραδείγματα (4) Find the set of project numbers for employee 3456, excluding projects 7, 8, and 9. set the (select e.projects from employees as e where e.id = 3456) s_except set (7, 8, 9) Find the manager number and higest projecct number for each employee. select e. manager, (select max (p.pno) from table (e.projects) as p(pno)) from employees as e - 64 32