ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Σχετικά έγγραφα
ΗΜΙΟΥΡΓΙΑ USER DEFINED DATATYPES ΣΤΗΝ IBM DB2

Αποθηκευμένες Διαδικασίες Stored Routines (Procedures & Functions)

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Ενότητα 3:

H SQL είναι η γλώσσα για όλα τα εμπορικά σχεσιακά συστήματα διαχείρισης βάσεων δεδομένων

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Βάσεις Δεδομένων ΗγλώσσαSQL (Structured Query Language)

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Βάσεις Δεδομένων Η γλώσσα SQL (Structured Query Language) Εισαγωγή στην SQL (2) Ιστορικά Στοιχεία. SQL - Structured Query Language (1)

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

Ακεραιότητα και Ασφάλεια Μέρος 1 Σχεδιασμός Βάσεων Δεδομένων

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples Ξένου Ρουμπίνη

Ορισμοί Σχεσιακού Μοντέλου και (απλές)τροποποιήσεις Σχέσεων στην SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΕΝΑΥΣΜΑΤΑ ΣΤΗΝ POSTGRES

Σχεδιασμός Βάσεων Δεδομένων

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 3ο Μάθημα: Εισαγωγή στην SQL. Δρ. Κωνσταντίνος Χ.

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Τμήμα Διοίκησης Επιχειρήσεων

( Boats)) ( Tempsids, bid. sname. Boats. Boats. Boats. (Reserves)/ > Reserves. Interlake' Sailors) ...

Το σχεσιακό μοντέλο βάσεων δεδομένων

Εργαστήριο Βάσεων Δεδομένων. Triggers

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΙI

Ενεργές ΒΔ. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Βάσεις Δεδομένων Ενεργές ΒΔ 1

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Postgress ΣΤΟΧΟΣ ΣΧΕΤΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ ΥΛΙΚΟ. ΠΕΡΙΒΑΛΛΟΝ ΓΙΑ ΕΞΑΣΚΗΣΗ pgadmin ΥΠΟΒΑΘΡΟ. Συναρτήσεις στην PostgreSQL. 1. Γενικά

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Διαχείριση Πολιτισμικών Δεδομένων

Βάσεις Δεδομένων. Εισαγωγή για το Εργαστήριο. Δρ. Τιάκας Ελευθέριος. Τμήμα Πληροφορικής ΑΠΘ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Βάσεις Δεδομένων 5η εργαστηριακή άσκηση

Αντικειµενο-Σχεσιακές Βάσεις εδοµένων. Περιεχόµενα

Βάσεις Δεδομένων (Databases)

Πανεπιστήµιο Ιωαννίνων Τµήµα Μαθηµατικών Μάθηµα: Βάσεις εδοµένων (741) Εργαστηριακό Τεστ Οµάδα: Α 18/11/2004

PostgreSQL. Oracle. Εαρινό Εξάμηνο

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

PL/SQL. Κώστας Στεφανίδης

Ηλεκτρονικοί Υπολογιστές II

Διάλεξη 16: SQL DML IV, SQL DCL, SQL TCL. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 07: Σχεσιακό Μοντέλο II (Relational Data Model) Διδάσκων: Παναγιώτης Ανδρέου

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ Relational Model. SQL Μαθ. #11

Βάσεις Δεδομένων (Ε) Εισαγωγή στην υλοποίηση σχεσιακών βάσεων δεδομένων

2 ο Σύνολο Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΑΠΟΘΗΚΕΥΜΕΝΕΣ ΔΙΑΔΙΚΑΣΙΕΣ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Αντικειμενοστρεφής Προγραμματισμός

ΕΠΛ 342 Βάσεις εδοµένων

MySQL + Γλώσσα Προγραμματισμού. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples ΙΙ Ξένου Ρουμπίνη

Σχεδίαση και λειτουργία βάσης δεδομένων Το παράδειγμα της μαιευτικής κλινικής Ευάγγελος Καρβούνης

Τεχνολογία Πολιτισμικού Λογισμικού

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

10 η Διάλεξη Python Βάσεις δεδομένων στη python

Βάσεις Δεδομένων σχεσιακών αντικειμένων Βάσεις Δεδομένων Διδάσκων: Μ. Χαλκίδη

Αντικειµενοστρεφής Προγραµµατισµός

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

ΘΕΜΑΤΑ. Ερώτηση 1 Κατά τη Φυσική Αποθήκευση (Physical storage) μιας ΒΔ αποθηκεύονται στον δίσκο τα:

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Βασικά Στοιχεία της Java

Διάλεξη 17: Προγραμματισμός Βάσης Δεδομένων Ι. Διδάσκων: Παναγιώτης Ανδρέου

SQL Τύποι Δεδομένων Δημιουργία Πίνακα Παράδειγμα.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (1)

Εργαστήριο Βάσεων Δεδομένων

ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΓΡΕΒΕΝΑ)

Ανοικτά Ακαδημαϊκά Μαθήματα

ΕΠΛ 342 Βάσεις εδοµένων

. Εργαστήριο Βάσεων Δεδομένων. Triggers

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12

Βάσεις Δεδομένων. Ενότητα 6: Γλώσσα Structured Query Language -SQL. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

SQL Data Manipulation Language

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

(Διαφάνειες Νίκου Βιδάκη)

Για την υλοποίηση του προγράμματος χρειάζονται 3 βασικές κλάσεις.

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ

Εισαγωγή στον Προγραμματισμό

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Παράδειγμα Insert Update Delete Alter.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (2)

Βάσεις Περιβαλλοντικών Δεδομένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #3

Εργαστήριο Βάσεων Δεδομένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Αντικειµενοστραφής Προγραµµατισµός

Φυσική Σχεδίαση Υλοποίηση βάσης

Εργαστήριο βάσεων δεδομένων. MySQL Stored Procedures

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Εισαγωγή στην πληροφορική

Βάσεις Δεδομένων Ι SQL Μέρος 1 ο. Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

Wrapper Classes, Abstract Classes and Interfaces

Transcript:

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Ορισμός: Τα αντικειμενοσχεσιακά συστήματα Βάσεων Δεδομένων μπορούν να θεωρηθούν ως μία προσπάθεια επέκτασης των Σχεσιακών Συστημάτων Βάσεων Δεδομένων με τη λειτουργικότητα που απαιτείται για την υποστήριξη μιας ευρύτερης τάξης εφαρμογών. Ουσιαστικά αποτελούν μια γέφυρα μεταξύ των σχεσιακών και των αντικειμενοστρεφών προτύπων. 2

1986 SQL87 1989 μικρή βελτίωση της SQL87 1992 SQL2 Μεγάλη βελτίωση, ολοκλήρωση DML και DDL για το σχεσιακό μοντέλο. 1999 SQL3 Προστέθηκαν τα εναύσματα, αναδρομή, αντικειμενοστρεφή στοιχεία 2003 SQL2003 Προστέθηκε κάποια υποστήριξη προς την XML. 2006 SQL2006 Προστέθηκε πλήρης υποστήριξη προς την XML και συνδυασμό αιτημάτων SQL/XQuery. 2008 SQL2008 περισσότερη λειτουργικότητα για XML/XQuery, κλήση Java προγραμμάτων, στοιχεία προγραμματισμού 2011 SQL2011 υποστήριξη των temporal databases 3

Η απουσία αντικειμενοστρεφών χαρακτηριστικών Η υποστήριξη μόνο απλών τύπων ορισμένων από το σύστημα Η απουσία αναδρομής Ο περιορισμένος αριθμός συναρτήσεων και Η έλλειψη computational completeness. 4

Η ανάγκη για την εξέλιξη της SQL-2 (SQL:1992) με αντικειμενοστρεφή στοιχεία είχε ως αποτέλεσμα τη δημιουργία της SQL-3 (SQL:1999). 5

Νέοι τύποι ορισμένοι από τον χρήστη Αφαίρεση (Abstraction) Ενθυλάκωση (Encapsulation) Κληρονομικότητα (Inheritance) Μέθοδοι Συναρτήσεις Αναδρομή 6

7

Στην SQL-3 οι χρήστες έχουν την δυνατότητα να δημιουργήσουν νέους τύπους. Υπάρχουν δύο είδη: Απλοί τύποι (distinct types) Σύνθετοι τύποι (Structured types) 8

Οι απλοί τύποι (distinct types) βασίζονται στους ενσωματωμένους τύπους του συστήματος, π.χ. integer, varchar. Οι απλοί τύποι δεν μπορούν να χρησιμοποιηθούν για να δηλωθούν πάνω τους άλλοι απλοί τύποι. Με τους απλούς τύπους μπορούμε να διαχειριστούμε καλύτερα τη σημασιολογία των δεδομένων. 9

CREATE DISTINCT TYPE b_name_type AS VARCHAR(20) WITH COMPARISONS; Η παράμετρος WITH COMPARISONS χρησιμοποιείται για να ενεργοποιηθεί η δυνατότητα σύγκρισης μεταξύ δύο απλών τύπων, οι οποίοι έχουν δηλωθεί βασιζόμενοι σε τύπο της db2 που μπορεί να συγκριθεί (π.χ. integer, date). CREATE DISTINCT TYPE p_name_type AS VARCHAR(20) WITH COMPARISONS; CREATE DISTINCT TYPE headcount_type AS INTEGER WITH COMPARISONS; 10

11

12

Δημιουργούμε δύο πίνακες οι οποίοι αποθηκεύουν ο πρώτος επιχειρήσεις με απλή δομή (επωνυμία, Αριθμό υπαλλήλων) και ο δεύτερος άτομα με απλή δομή (όνομα, ηλικία) CREATE TABLE Business1 (Name varchar(20), Headcount integer); CREATE TABLE Person1 (Name varchar(20), age integer); 13

Εισάγουμε μία εγγραφή σε κάθε πίνακα, όπου φροντίζουμε η επωνυμία της επιχείρησης και το όνομα του ατόμου να είναι ίδια. insert into business1 values ('Jack', 20); insert into person1 values ('Jack', 35); 14

Εκτελούμε το παρακάτω αίτημα όπου συγκρίνουμε την επωνυμία της επιχείρησης με το όνομα ενός ανθρώπου. select b.*, p.* from person1 p, business1 b where p.name = b.name ; 15

16

Δημιουργούμε δύο πίνακες οι οποίοι αποθηκεύουν ο πρώτος επιχειρήσεις με απλή δομή (επωνυμία, Αριθμό υπαλλήλων) και ο δεύτερος άτομα με απλή δομή (όνομα, ηλικία). Η επωνυμία της επιχείρησης είναι τύπου b_name_type ο οποίος ορίστηκε από τον χρήστη πάνω στον τύπο varchar(20) και το όνομα του ατόμου είναι τύπου p_name_type ο οποίος ορίστηκε από τον χρήστη πάνω στον τύπο varchar(20). CREATE TABLE Business2 (Name b_name_type, Headcount headcount_type); CREATE TABLE Person2 (Name p_name_type, age int); 17

Εισάγουμε μία εγγραφή σε κάθε πίνακα, όπου φροντίζουμε η επωνυμία της επιχείρησης και το όνομα του ατόμου να είναι ίδια. insert into business2 values ('Jack', 20); insert into person2 values ('Jack', 35); 18

Εκτελούμε το παρακάτω αίτημα όπου συγκρίνουμε την επωνυμία της επιχείρησης με το όνομα ενός ανθρώπου. select b.*, p.* from person2 p, business2 b where p.name = b.name ; 19

20

Ταυτότητα Ιδιότητες Κληρονομικότητα Αναφορά 21

Ταυτότητα Η ταυτότητα ενός αντικειμένου δημιουργείται αυτόματα από το σύστημα. Είναι μοναδική. Αμετάβλητη. Ανεξάρτητη από τις τιμές των ιδιοτήτων του αντικειμένου Το κύριο κλειδί είναι ακατάλληλο για την υλοποίηση της ταυτότητας αντικειμένου. Το κύριο κλειδί είναι μοναδικό μέσα στον πίνακα και όχι σε όλο το σύστημα. Η τιμή του κύριου κλειδιού είναι εξαρτημένη από τις ιδιότητες της οντότητας. 22

Ιδιότητες Χαρακτηριστικά (Attributes) - Κατάσταση Μέθοδοι (Methods) - Συμπεριφορά 23

Η κατάσταση περιγράφει τις ιδιότητες του αντικειμένου. Οι ιδιότητες του αντικειμένου μπορεί να είναι: Απλού τύπου Σύνθετου τύπου Τύπου Συλλογής Αναφορά σε ένα άλλου τύπου αντικείμενο. Θα μπορούσε να αντιστοιχηθεί με το ξένο κλειδί των σχεσιακών βάσεων δεδομένων ή τον δείκτη στις γλώσσες προγραμματισμού. Παράδειγμα δήλωσης αναφοράς: HisNurse Nurse; HisNurse REF(Nurse); ΣΥΝΘΕΤΟ ΓΝΩΡΙΣΜΑ ΤΥΠΟΣ ΑΝΑΦΟΡΑΣ 24

Person BusinessUnit Employee Student Address_t Manager Architect Brazil_addr_t Germany_addr_t US_addr_t 25

CREATE TYPE BusinessUnit_t AS ( Name b_name_type, Headcount INT) REF USING INT MODE DB2SQL; 26

Όταν δηλώνουμε έναν τύπο με την CREATE TYPE μπορούμε να ορίσουμε τον τύπο (ονομάζεται τύπος αναφοράς) πάνω στον οποίο θα χτιστεί η ταυτότητα του νέου τύπου. Αν δεν ορίσουμε τύπο αναφοράς τότε η ταυτότητα ορίζεται πάνω στον τύπο VARCHAR(16). Μπορούμε να ορίσουμε τύπο αναφοράς μόνο για τον υπερτύπο μιας ιεραρχίας. Για τους υποτύπους του θα δημιουργηθούν ταυτότητες βάση του τύπου αναφοράς του υπερτύπου τους. 27

28

29

CREATE TYPE Address_t AS ( street VARCHAR(30), number CHAR(15), city VARCHAR(30), state VARCHAR(10)) MODE DB2SQL; CREATE TYPE Germany_addr_t UNDER Address_t AS ( family_name VARCHAR(30)) MODE DB2SQL; CREATE TYPE Brazil_addr_t UNDER Address_t AS ( neighborhood VARCHAR(30)) MODE DB2SQL; CREATE TYPE US_addr_t UNDER Address_t AS ( zip CHAR(10)) MODE DB2SQL; Με το UNDER δηλώνεται η ιεραρχία. Η Germany_addr_t είναι υποτύπος του τύπου Address_t 30

31

Δηλώνεται ο υπερτύπος 32

CREATE TYPE Person_t AS ( Name p_name_type, Age INT, Address Address_t) INSTANTIABLE REF USING VARCHAR(13) FOR BIT DATA MODE DB2SQL; Όταν ορίζουμε έναν τύπο INSTANTIABLE (είναι το default) σημαίνει ότι μπορούμε να δημιουργήσουμε πίνακες (αντικείμενα) με βάση αυτόν τον τύπο. Το αντίθετο δηλώνεται με το NOT INSTANTIABLE. Ένας τύπος που δηλώνεται ως NOT INSTANTIABLE αντιστοιχεί στην αφηρημένη τάξη (abstract class). 33

CREATE TYPE Employee_t UNDER Person_t AS ( SerialNum INT, Salary INTEGER, Dept REF(BusinessUnit_t)) MODE DB2SQL; Dept REF(BusinessUnit_t) Δηλώνεται ένα γνώρισμα τύπου αναφοράς. Το γνώρισμα Dept είναι αναφορά σε αντικείμενο τύπου BusinessUnit_t 34

CREATE TYPE Student_t UNDER Person_t AS (SerialNum CHAR(6), GPA DOUBLE) MODE DB2SQL; CREATE TYPE Manager_t UNDER Employee_t AS (Bonus INTEGER) MODE DB2SQL; CREATE TYPE Architect_t UNDER Employee_t AS (StockOption INTEGER) MODE DB2SQL; 35

36

37

38

CREATE TABLE BusinessUnit OF BusinessUnit_t (REF IS Oid USER GENERATED); Δημιουργείται ο πίνακας BusinessUnit με βάση τον σύνθετο τύπο BusinnessUnit_t. Ουσιαστικά δημιουργείται ένα σετ διαρκών αντικειμένων με όνομα BusinessUnit της κλάσης BusinessUnit_t Επειδή ένας πίνακας βασισμένος σε σύνθετο τύπο είναι αντικείμενο το οποίο μπορεί να γίνει αναφορά από άλλο αντικείμενο θα πρέπει να έχει ταυτότητα (Oid). Μπορώ να "βαφτίσω" την ταυτότητα με χρήση της παραμέτρου Oid REF IS... USER GENERATED Κατά την εισαγωγή μίας γραμμής πίνακα θα δηλώνεται και η τιμή του "Oid" 39

CREATE TABLE BusinessUnit2 OF BusinessUnit_t (REF IS Oid USER GENERATED); Δημιουργία 2 ης συλλογής αντικειμένων της ίδιας τάξης 40

INSERT INTO BusinessUnit (Oid, Name, Headcount) VALUES(BusinessUnit_t(1), 'Toy', 15); Η ταυτότητα δηλώνεται με βάση τον σύνθετο τύπο που δημιουργήθηκε το αντικείμενο και παράμετρο το Oid που περνάμε σαν παράμετρο. CREATE TYPE BusinessUnit_t AS ( Name b_name_type, Headcount INT) REF USING INT MODE DB2SQL; Ουσιαστικά δεν μπορούμε να μάθουμε την τιμή της ταυτότητας αλλά μπορούμε να αναφερθούμε σε ένα αντικείμενο. 41

42

43

Τ για σχεσιακούς πίνακες, U για User Defined πίνακες, H για Ιεραρχία Τύπος Reference, Αναφοράς 44

Ο Τύπος δημιουργίας της ταυτότητας είναι ακέραιος. 45

CREATE TABLE Person OF Person_t (REF IS Oid USER GENERATED); CREATE TABLE Employee OF Employee_t UNDER Person INHERIT SELECT PRIVILEGES (SerialNum WITH OPTIONS NOT NULL, Dept WITH OPTIONS SCOPE BusinessUnit ); INHERIT SELECT PRIVILEGES Δηλώνεται ότι η υποτάξη κληρονομεί και τις ιδιότητες πρόσβασης της υπερτάξης. Δηλαδή, αν κάποιοι χρήστες έχουν δικαίωμα πρόσβασης στην υπερτάξη θα έχουν και στην υποτάξη. WITH OPTIONS NOT NULL Δηλώνεται μία ιδιότητα σε ένα γνώρισμα που ισχύει μόνο για τα αντικείμενα που αποθηκεύονται στη συγκεκριμένη συλλογή (table) Employee. Για παράδειγμα, στα αντικείμενα του πίνακα Employee το γνώρισμα SerialNum δεν μπορεί να πάρει κενές τιμές. Dept WITH OPTIONS SCOPE BusinessUnit Δηλώνεται ότι το γνώρισμα Dept αναφέρεται μόνο στα αντικείμενα του πίνακα BusinessUnit. Αν δηλαδή δημιουργηθεί και ένας δεύτερος πίνακας BusinessUnit2 του τύπου BusinessUnit_t τότε το γνώρισμα Dept όπως έχει δηλωθεί δεν μπορεί να αναφερθεί στα αντικείμενα αυτού του πίνακα. 46

Ο Τύπος δημιουργίας της ταυτότητας είναι varchar(13). O default 47

CREATE TABLE Student OF Student_t UNDER Person INHERIT SELECT PRIVILEGES; CREATE TABLE Manager OF Manager_t UNDER Employee INHERIT SELECT PRIVILEGES; CREATE TABLE Architect OF Architect_t UNDER Employee INHERIT SELECT PRIVILEGES; 48

Στον πίνακα αρχιτέκτονα αποθηκεύονται όλα τα γνωρίσματα τα δικά του και των υπερτάξεων του. 49

INSERT INTO Person (Oid, Name, Age, address) VALUES (Person_t('z'), 'Tasos', 20, address_t( )..street('bakely Avenue')..number('555')..city('San Jose')..state('CA')); Person_t('z'): Η ταυτότητα δημιουργείται βάση του τύπου του πίνακα με παράμετρο που δίνουμε εμείς. Το σύνθετο γνώρισμα address δεν είχε οριστεί ως αναφορά. Επομένως, θα πρέπει οι τιμές του να εισαχθούν εδώ. 50

INSERT INTO Employee (Oid, Name, Age, SerialNum, Salary, Dept) VALUES (Employee_t('d'), 'Dennis', 26, 105, 30000, BusinessUnit_t(1)); Με το Employee_t('d') ορίζεται η ταυτότητα. Με το BusinessUnit_t(1) αναφέρεται σε αντικείμενο που δημιουργήθηκε με τη συγκεκριμένη ταυτότητα. 51

Select Name, Age from Person; Person Employee 52

Select Name, Salary, Dept->Name From Employee; 53

Select Name, Age From ONLY(Employee); Με το ONLY εξασφάλισε ότι τα δεδομένα θα τα πάρει από τον employee μόνο και όχι από τις υποτάξεις του Employee 54

Select Name, Age From Employee E Where E.Age > 35 and DEREF(E.OID) IS OF (Manager_t, Architect_t); Παίρνουμε αναφορά στο αντικείμενο Η Anna δεν εμφανίστηκε γιατί δεν είναι Manager_t ή Architect_t 55

SELECT p.name, p.address..street, p.address..number FROM Person p Με τις «..» έχει πρόσβαση στα γνωρίσματα της διεύθυνσης 56

Select Name, Age, oid From Person Where age > 35; Παίρνουμε την ταυτότητα Select Name, Age, oid From Employee Where age > 35; Select oid From BusinessUnit; 57

58

59

Στους σύνθετους τύπους μπορούμε να συμπεριλάβουμε και μεθόδους. Μία μέθοδος πρώτα δηλώνεται στον τύπο και μετά υλοποιείται το σώμα της. 60

H δήλωση μίας μεθόδου γίνεται είτε με την εντολή CREATE TYPE είτε με την εντολή ALTER TYPE. Παράδειγμα: ALTER TYPE Manager_t ADD METHOD total_salary() RETURNS integer LANGUAGE SQL; 61

62

63

CREATE TYPE address_t2 AS (STREET VARCHAR(30), NUMBER CHAR(15), CITY VARCHAR(30), STATE VARCHAR(10)) MODE DB2SQL METHOD SAMEZIP (addr address_t2) RETURNS INTEGER LANGUAGE SQL CONTAINS SQL 64

65

Με την εντολή CREATE METHOD συσχετίζεται το σώμα μίας μεθόδου με την δήλωση της μεθόδου η οποία έχει προηγηθεί με τη δημιουργία ενός σύνθετου τύπου. Το σώμα της μεθόδου μπορεί να δημιουργηθεί: εξωτερικά με μία γλώσσα προγραμματισμού, ή εσωτερικά με εντολές SQL. 66

CREATE METHOD όνομα_μεθόδου (όνομα_παραμέτρου1 τύπος1, ) RETURNS τύπος_που_επιστρέφει FOR σύνθετος_τύπος_που_δηλώθηκε RETURN SQL-command 67

Παράδειγμα: CREATE METHOD total_salary() RETURNS integer FOR Manager_t RETURN select SELF..Salary + SELF..Bonus from manager; ή CREATE METHOD total_salary() RETURNS INTEGER FOR Manager_t RETURN SELF..Salary + SELF..Bonus; 68

69

Παράδειγμα: select name, DEREF(oid)..total_salary() from Manager; Select name, oid-> total_salary() From Manager; 70

Δήλωση Μεθόδου στον τύπο Manager_t ALTER TYPE Manager_t ADD METHOD comparesalary (sal manager_t) RETURNS integer LANGUAGE SQL; Δημιουργία μεθόδου CREATE METHOD comparesalary (sal manager_t) RETURNS INTEGER FOR manager_t RETURN (CASE WHEN (self..salary >= sal..salary) THEN 1 ELSE 0 END) Κλήση μεθόδου select m1.name, m2.name, DEREF(m1.oid)..comparesalary(deref(m2.oid)) from Manager m1, Manager m2 Where m1.oid!= m2.oid 71

72

73

1. Για να διαγράψουμε το σώμα μίας μεθόδου χρησιμοποιούμε την παρακάτω εντολή: DROP METHOD TOTAL_SALARY FOR MANAGER_T; Στη σύνταξη του τύπου που δηλώθηκε η μέθοδος υπάρχει ακόμα. 2. Για να διαγράψουμε μία μέθοδο από έναν τύπο θα πρέπει πρώτα να διαγράψουμε το σώμα της μεθόδου και μετά να αφαιρέσουμε τη μέθοδο από τον τύπο, όπως φαίνεται παρακάτω: ALTER TYPE MANAGER_T DROP METHOD TOTAL_SALARY 74

Στα Αντικειμενοσχεσιακά Συστήματα Βάσεων Δεδομένων υπάρχει η δυνατότητα ο χρήστης να δημιουργήσει νέες συναρτήσεις και να τις χρησιμοποιήσει σε αιτήματα. Υπάρχουν τριών ειδών νέες συναρτήσεις: 1. Εξωτερικές Γράφονται σε μία γλώσσα προγραμματισμού όπως Java, C 2. SQL Κάνουν χρήση μόνο της SQL return εντολής 3. Sourced Κάνουν χρήση των συναρτήσεων του συστήματος 75

Μία συνάρτηση αποτελείται από υπογραφή και σώμα. Η υπογραφή μίας συνάρτησης αποτελείται από το όνομα της συνάρτησης, παραμέτρους, τύπο παραμέτρων. Επιτρέπεται να υπερφορτωθεί μία συνάρτηση. 76

Create definition in db2 Πρώτα δηλώνεται η συνάρτηση. Πιο συγκεκριμένα δηλώνεται 1. Το όνομα της, 2. Οι παράμετροι της 3. Ο τύπος που επιστρέφεται με το RETURNS 4. Ότι δεν θα χρησιμοποιηθεί SQL 5. Ποια θα είναι η γλώσσα που θα γραφτεί το σώμα της συνάρτησης 6. Με ποιο στυλ θα δηλωθούν οι παράμετροι 7. Το εξωτερικό όνομα της συνάρτησης (Όνομα κλάσης!μέθοδος) CREATE FUNCTION BitAnd(value1 INT, value2 INT) RETURNS integer NO SQL LANGUAGE JAVA PARAMETER STYLE JAVA EXTERNAL NAME 'DB2Appl1!testUDF'; 77

Java code import java.sql.*; import java.lang.*; import COM.ibm.db2.app.*; class DB2Appl1 extends UDF { public static int testudf(int value1, int value2) { try { return(value1 & value2); } catch(exception e) { return(0); } } } Το class αρχείο το τοποθετούμε στο directory c:\program Files\IBM\SQLLIB\FUNCTION 78

Εκτέλεση SELECT name, BitAnd(110,headcount) FROM Business1; 79

80

Create definition in db2 2o παράδειγμα CREATE FUNCTION concat(value1 varchar(20), value2 varchar(20)) RETURNS varchar(40) NO SQL LANGUAGE JAVA PARAMETER STYLE JAVA EXTERNAL NAME 'DB2Appl2!concatstrings'; 81

82

Java code import java.sql.*; import java.lang.*; import COM.ibm.db2.app.*; class DB2Appl2 extends UDF { public static String concatstrings(string value1, String value2) { String value3 = value1 + value2; return value3; } } 83

Εκτέλεση create table personexample( code integer not null primary key, Surname varchar(20), Name varchar(20)); insert into personexample values (1,'Obama', 'Barak'); insert into personexample values (2,'Bush', 'George'); SELECT name, concat(name,surname) FROM personexample; 84

85

Οι συναρτήσεις SQL κάνουν χρήση μόνο της Return εντολής. Μπορούν να περιέχουν ένα Select αίτημα ή άλλες συναρτήσεις του συστήματος. 86

create function agef(birthdate date) returns integer language SQL contains SQL return year(current_date) - year(birthdate); 87

create table a( aname char(20) not null primary key, afield date); insert into a values ('John', '1/1/1970'), ('George', '1/6/1980'); select aname, agef(afield) from a; 88

To πρόγραμμα έτρεξε το 2008 89

CREATE FUNCTION oursum(παράμετροςεισόδου integer) RETURNS integer LANGUAGE SQL READS SQL DATA NO EXTERNAL ACTION BEGIN ATOMIC DECLARE RESULTADO integer; IF (παράμετροςεισόδου = 1) THEN SET RESULTADO = (Select Sum(Salary) From ONLY(Manager)); ELSEIF (παράμετροςεισόδου = 2) THEN SET RESULTADO = (Select Sum(Salary) From ONLY(Architect)); END IF; RETURN RESULTADO; END @ Επιτρέπει να κατεβαίνει το αποτέλεσμα select ερωτήματος σε κάποια μεταβλητή που δηλώθηκε select distinct oursum(1) from Employee; 90

Με τις συναρτήσεις SOURCE αυτό που κάνουμε είναι να χρησιμοποιήσουμε έτοιμες συναρτήσεις του συστήματος Παράδειγμα: Δημιουργούμε την συνάρτηση Head_Max η οποία χρησιμοποιεί την max για ακεραίους για να βρίσκει το μέγιστο ανάμεσα σε Απλούς τύπους ορισμένους από τον Χρήστη όπως o τύπος Head_count ο οποίος έχει υλοποιηθεί με βάση τον integer. CREATE FUNCTION Head_MAX(Headcount_type) RETURNS Headcount_type SOURCE SYSIBM.max(INTEGER); SELECT Head_Max(Headcount) as max FROM Business2 91

92

ΕΠΟΜΕΝΗ ΕΝΟΤΗΤΑ