Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 23

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

ΓΛΩΣΣΑ ΟΡΙΣΜΟΥ
ΔΕΔΟΜΕΝΩΝ

1 31/05/2024
Ορισμός & Τύποι Δεδομένων SQL

Όροι SQL Σχήμα SQL (ver 


πίνακας (table)  σχέση SQL2)
γραμμή (row)  πλειάδα όνομα σχήματος
στήλη (column)  γνώρισμα ταυτότητα
Κατάλογος εξουσιοδότησης
επώνυμη συλλογή περιγραφείς
σχημάτων
στοιχείων

CREATE SCHEMA COMPANY AUTHORIZATION ‘Jsmith’;

31/05/2024
Γλώσσα Ορισμού Δεδομένων

Σχετικά με το λογικό σχήμα, η ΓΟΔ SQL υποστηρίζει τους


ορισμούς:
του σχήματος κάθε σχέσης
του πεδίου τιμών κάθε γνωρίσματος
των περιορισμών ακεραιότητας
CREATE TABLE R(A1 D1,A2 D2,...,An Dn),
<περιορισμός-ακεραιότητας1>,
…,
<περιορισμός-ακεραιότηταςk>

όπου R είναι το όνομα της σχέσης, Ai τα ονόματα των


γνωρισμάτων, και Di οι τύποι των αντίστοιχων πεδίων τιμών.

3 31/05/2024
Στην Πράξη

CREATE TABLE EMPLOYEE (


Fname VARCHAR(15) NOT NULL,
Minit CHAR,
Lname VARCHAR(15) NOT NULL,
Ssn CHAR(9) NOT NULL,
Bdate DATE,
Address VARCHAR(15),
Sex CHAR
Salary DECIMAL(10,2)
Super_ssn CHAR(9)
Dno INT NOT NULL,
PRIMARY KEY (Ssn)
FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn)
FOREIGN KEY (Dno) REFERENCES DEPARTMENT(Dnumber) );
4 31/05/2024
Στην Πράξη

CREATE TABLE DEPARTMENT(


Dname VARCHAR(15) NOT NULL,
Dnumber INT NOT NULL,
Mgr_ssn CHAR(9) NOT NULL,
Mgr_start_date DATE,
PRIMARY KEY (Dnumber)
UNIQUE (Dname),
FOREIGN KEY (Mgr_ssn) REFERENCES EMPLOYEE(Ssn) );

5 31/05/2024
Τύποι Πεδίου Ορισμού

Για τον ορισμό του πεδίου ορισμού, οι διαθέσιμοι


ενσωματωμένοι (built-in) τύποι περιλαμβάνουν:
char(n) (σταθερού μήκους)
varchar(n)
int
Στην SQLite χρησιμοποιούνται οι
smallint ακόλουθοι τύποι :
numeric(p, d) (d από NULL: αδιάστατο μέγεθος που αντιστοιχεί
τα p ψηφία είναι στα σε μη εισαχθείσα τιμή
δεξιά της υποδιαστολής) TEXT: αντιστοιχεί στον τύπο δεδομένων
real, double precision <VARCHAR()> του Τόμου Γ’, οι
αλφαριθμητικές τιμές
float(n) INTEGER: αντιστοιχεί στον τύπο
date (ημερομηνία) δεδομένων <INT> του Τόμου Γ’, οι
time (ώρα) ακέραιες τιμές αριθμών
REAL: οι πραγματικές τιμές αριθμών
6 31/05/2024
Πεδία Τιμών

Ο ορισμός πεδίου μπορεί να περιέχει τον προσδιορισμό NOT


NULL και default τιμή.

Επίσης, επιτρέπεται η δημιουργία πεδίου:

CREATE DOMAIN <name> AS <type-description>

CREATE DOMAIN Όνομα-Προσώπου char(20)

7 31/05/2024
Περιορισμοί Ακεραιότητας

Επιτρεπτοί περιορισμοί ακεραιότητας είναι της μορφής:


PRIMARY KEY Aj1, Aj2, ..., Ajn (για ορισμό πρωτεύοντος
κλειδιού)
δεν επιτρέπονται επαναλαμβανόμενες τιμές και NULL τιμές
UNIQUE Aj1, Aj2, ..., Ajn (για ορισμό υποψηφίων κλειδιών)
δεν επιτρέπονται επαναλαμβανόμενες τιμές
NULL τιμές επιτρέπονται (μόνο μία)
CHECK P (για ορισμό σημασιολογικών περιορισμών)
FOREIGN KEY (Ai) REFERENCES Aj (για ορισμό ξένου κλειδιού)
Οι περιορισμοί ορίζονται
μια φορά στο σχήμα και
ελέγχονται κάθε φορά που
γίνεται μια τροποποίηση Στην SQLite οι δομές FOREIGN KEY και
UNIQUE πρέπει να τίθενται στο τέλος της
του στιγμιότυπου. εντολής δημιουργίας των πινάκων, πριν
8 31/05/2024
τον ορισμό του κλειδιού.
Ορισμός Σχήματος – Παραδείγματα

(1)
CREATE TABLE Πελάτης
(Όνομα-Πελάτη char(20) NOT NULL,
Οδός char(30),
Πόλη char(30),
PRIMARY KEY (Όνομα-Πελάτη))
(2)
CREATE TABLE Λογαριασμός
(Αριθμός-Λογαριασμού char(10) NOT NULL,
Όνομα-Υποκαταστήματος char(15),
Ποσό int,
PRIMARY KEY (Αριθμός-Λογαριασμού)
CHECK (Ποσό >= 0)
Λογαριασμός(Όνομα-Υποκαταστήματος, Αριθμός-Λογαριασμού, Ποσό)
Υποκατάστημα (Όνομα-Υποκαταστήματος, Πόλη, Σύνολο)
Δάνειο(Όνομα-Υποκαταστήματος, Αριθμός-Δανείου, Ποσό)
Δανειζόμενος(Όνομα-Πελάτη, Αριθμός-Δανείου)
Πελάτης(Όνομα-Πελάτη, Οδός, Πόλη)
Καταθέτης(Όνομα-Πελάτη, Αριθμός-Λογαριασμού) 9 31/05/2024
Ορισμός Σχήματος

Επίσης, μπορούμε να έχουμε πιο περίπλοκες συνθήκες,


π.χ., για ξένα κλειδιά:

CHECK (Όνομα-Υποκαταστήματος IN
SELECT Όνομα-Υποκαταστήματος
FROM Υποκατάστημα)

Λογαριασμός(Όνομα-Υποκαταστήματος, Αριθμός-Λογαριασμού, Ποσό)


Υποκατάστημα (Όνομα-Υποκαταστήματος, Πόλη, Σύνολο)
Δάνειο(Όνομα-Υποκαταστήματος, Αριθμός-Δανείου, Ποσό)
Δανειζόμενος(Όνομα-Πελάτη, Αριθμός-Δανείου)
Πελάτης(Όνομα-Πελάτη, Οδός, Πόλη)
Καταθέτης(Όνομα-Πελάτη, Αριθμός-Λογαριασμού)

10 31/05/2024
Περιορισμοί Ακεραιότητας – Περιορισμοί Αναφορικής Ακεραιότητας

Σύνταξη:

FOREIGN KEY (AI) REFERENCES Aj

Όταν μία πράξη παραβιάζει έναν περιορισμό


αναφοράς απορρίπτεται εκτός αν έχει οριστεί:

ON DELETE CASCADE
ON UPDATE CASCADE

11 31/05/2024
Περιορισμοί Ακεραιότητας – Παράδειγμα

CREATE TABLE
..
FOREIGN KEY (Όνομα-Υποκαταστήματος) REFERENCES
Υποκατάστημα
ON DELETE CASCADE
ON UPDATE CASCADE

Λογαριασμός(Όνομα-Υποκαταστήματος, Αριθμός-Λογαριασμού, Ποσό)
Υποκατάστημα (Όνομα-Υποκαταστήματος, Πόλη, Σύνολο)
Δάνειο(Όνομα-Υποκαταστήματος, Αριθμός-Δανείου, Ποσό)
Δανειζόμενος(Όνομα-Πελάτη, Αριθμός-Δανείου)
Πελάτης(Όνομα-Πελάτη, Οδός, Πόλη)
Καταθέτης(Όνομα-Πελάτη, Αριθμός-Λογαριασμού)

12 31/05/2024
Ξένα Κλειδιά (Περιορισμοί Αναφορικής Ακεραιότητας)

Η γλώσσα SQL υποδεικνύει μέσω της εντολής


FOREIGN KEY την αντιμετώπιση παραβίασης
Default: Αγνόησε την προσπάθεια ενημέρωσης που
οδηγεί σε παραβίαση
Εναλλακτικά, πρόσθεσε στην εντολή μια συνθήκη
SET NULL, CASCADE, SET DEFAULT
ON DELETE και ON UPDATE
Η ΒΔ αντιμετωπίζει τα SET NULL or SET DEFAULT
με τον ίδιο τρόπο για ON DELETE και ON UPDATE
CASCADE κατάλληλο για “relationship” πίνακες

13 31/05/2024
Στην Πράξη

14 31/05/2024
Ακεραιότητα Αναφορών στη SQL – Παράδειγμα

CREATE TABLE customer


(customer_name char(20),
customer_street char(30),
customer_city char(30),
PRIMARY KEY (customer_name))

CREATE TABLE branch


(branch_name char(15),
branch_city char(30),
assets numeric(12,2), // or Dollars //
PRIMARY KEY (branch_name),
CHECK (assets >= 0))

15 31/05/2024
Ακεραιότητα Αναφορών στη SQL – Παράδειγμα συνέχεια…

CREATE TABLE account


(account_numberchar(10), // or AccountNumber //
branch_name char(15),
balance integer,
PRIMARY KEY (account_number),
FOREIGN KEY (branch_name) REFERENCES branch
ON DELETE CASCADE,
ON UPDATE CASCADE)

Εξ’ αιτίας του όρου ON DELETE CASCADE που σχετίζεται με τη δήλωση του
ξένου κλειδιού, αν η διαγραφή μιας εγγραφής στη σχέση branch καταλήξει να
παραβιάζεται αυτός ο περιορισμός ακεραιότητας αναφορών, το σύστημα δεν
απορρίπτει τη διαγραφή. Αντίθετα, η διαγραφή μεταφέρεται διαδοχικά στη σχέση
account, διαγράφοντας την εγγραφή που αναφέρεται στο υποκατάστημα που
διαγράφηκε.
Παρομοίως, εξαιτίας του όρου ON UPDATE CASCADE το σύστημα ενημερώνει
το πεδίο branch_name στις αναφερόμενες εγγραφές του account με τη νέα τιμή.

16 31/05/2024
Ακεραιότητα Αναφορών στη SQL – Παράδειγμα συνέχεια…

CREATE TABLE depositor


(customer_name char(20),
account_number char(10),
PRIMARY KEY (customer_name, account_number),
FOREIGN KEY (customer_name) REFERENCES customer
ON DELETE CASCADE,
ON UPDATE CASCADE,
FOREIGN KEY (account_number) REFERENCES account
ON DELETE CASCADE,
ON UPDATE CASCADE)

17 31/05/2024
Ακεραιότητα Αναφορών στη SQL – Παράδειγμα συνέχεια…

CREATE TABLE loan


(loan_number char(20),
branch_name char(15),
amount integer,
PRIMARY KEY (loan_number),
FOREIGN KEY (branch_name) REFERENCES branch
ON DELETE CASCADE,
ON UPDATE CASCADE,
CHECK (amount >= 0))

18 31/05/2024
Ακεραιότητα Αναφορών στη SQL – Παράδειγμα συνέχεια…

CREATE TABLE borrower


(customer_name char(20),
loan_number char(10),
PRIMARY KEY (customer_name, loan_number),
FOREIGN KEY (customer_name) REFERENCES customer
ON DELETE CASCADE,
ON UPDATE CASCADE,
FOREIGN KEY (loan_number) REFERENCES loan
ON DELETE CASCADE,
ON UPDATE CASCADE)

19 31/05/2024
Περιορισμοί Ακεραιότητας – Πεδίου Ορισμού

Γίνεται χρησιμοποιώντας την εντολή CHECK:


Παραδείγματα:
(1) Ελάχιστο ωρομίσθιο
CREATE DOMAIN Ωρομίσθιο numeric(5, 2)
CONSTRAINT Έλεγχος-Ωρομισθίου CHECK(Ποσό >= 4.00)

(2) Να μην περιέχει την τιμή null


CREATE DOMAIN Πεδίο-Αριθμός-Λογαριασμού char(10)
CONSTRAINT Έλεγχος-Αριθμός-Λογαριασμού CHECK(value
NOT NULL)

(3) Να παίρνει συγκεκριμένες τιμές


CREATE DOMAIN Τύπος-Λογαριασμού char(10)
CONSTRAINT Έλεγχος-Τύπος-Λογαριασμού check value in
(‘Όψεως”, ‘Ταμιευτηρίου”)
20 31/05/2024
Τροποποίηση Σχήματος

ALTER TABLE όνομα πίνακα


ADD - προσθέτει καινούργια στήλη
DROP - διαγράφει μια στήλη
MODIFY - τροποποιεί μια στήλη

21 31/05/2024
Τροποποίηση Σχήματος

Προσθήκη νέου γνωρίσματος:


ALTER TABLE R ADD A D
Όταν γίνει προσθήκη σε μια σχέση R που ήδη υπάρχει
του γνωρίσματος A με πεδίο τιμών D, η τιμή των πλειάδων
της R στο καινούργιο γνώρισμα είναι null.

Διαγραφή γνωρίσματος:
ALTER TABLE R DROP A

Αλλαγή (μόνο τύπο δεδομένων, όχι όνομα στήλης)


ALTER TABLE R MODIFY (όνομα_στήλης
new_datatype)
22 31/05/2024
Διαγραφή Σχήματος

Μια καινούργια σχέση είναι αρχικά άδεια.

Για να σβηστεί ένα σχήμα:

DROP TABLE R

Διαφορά από

DELETE FROM R

23 31/05/2024

You might also like