Basi di Dati
description
Transcript of Basi di Dati
G. Mecca – [email protected] – Università della BasilicataG. Mecca – [email protected] – Università della Basilicata
Basi di Dati
SQL-92Dettagli e Approfondimenti
versione 2.0
Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
2G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Dettagli e Approfondimenti
DDL: Tabellevalori di defaultvincoli di riferimentomodifiche allo schema
DDL: Vistedefinizione e uso
DDL: Indici DCL
utenti
autorizzazionischemi esterni
DML: Aggiornamentiinserimenti
DML: Interrogazionioperatori insiemisticiSELECT: espressioniFROM: joinWHERE: op. like
SQL-92 >> Sommario
3G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
SQL
SQL-92 Intermediate DDL
“Data Definition Language”definizione degli oggetti dello schemaCREATE DATABASEDROP DATABASECREATE TABLEDROP TABLE
SQL-92 >> Dettagli e Approdondimenti
4G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
SQL
DCL“Data Control Language”utenti e autorizzazioni
DML“Data Manipulation Language”interrogazioni e aggiornamentiINSERT, DELETE, UPDATESELECT
SQL-92 >> Dettagli e Approdondimenti
5G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Tabelle
CreazioneCREATE TABLE <nome> (<schema>);
<schema>una o più definizioni di attributozero o più definizioni di vincoli di tabella
Definizione di attributo<nomeattributo> <tipo> [<vincoli di colonna>]
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
6G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Valori di Default
Nella CREATE TABLE e’ possibile specificare valori standard per gli attributi
CREATE TABLE Studenti ( matr integer PRIMARY KEY,
cognome varchar(20) NOT NULL,nome varchar(20) NOT NULL,ciclo char(20) DEFAULT ‘laurea tr.’,anno integer NOT NULL DEFAULT 1,relatore char(4) REFERENCES
Professori(cod));
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
7G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Vincoli di Riferimento
Vincoli di riferimento di colonna<attr> <tipo> REFERENCES <chiave est.>es: docente char(4) REFERENCES Professori(cod)
Vincoli di riferimento di tabellaFOREIGN KEY (<attributi>)
REFERENCES <chiave est.>es: se la chiave di Collegi è prov. e numero FOREIGN KEY (provincia, collegio) REFERENCES Collegi(provincia, numero)
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
8G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Vincoli di Riferimento
Aggiornamenti in cascataON {UPDATE | DELETE} <azione>
<azione>CASCADESET NULLSET DEFAULTes: docente char(4) REFERENCES Professori(cod) ON UPDATE SET NULL;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
9G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Modifiche allo Schema
Modifiche ad una tabella già esistenteALTER TABLE
Tre funzioniridenominazione della tabellaaggiunta, ridenominazione ed eliminazione
di attributiaggiunta ed eliminazione di vincoli
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
10G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Modifiche allo Schema
Ridenominazione della tabellaALTER TABLE <nome> RENAME TO
<nuovo nome>;es: ALTER TABLE Professori RENAME TO Docenti;
Modifiche agli attributiALTER TABLE <nome> RENAME COLUMN
<vecchio attributo> TO <nuovo attributo>;ALTER TABLE <nome> ADD COLUMN
<nuovo attributo> <tipo>;ALTER TABLE <nome> DROP COLUMN
<nome attributo>;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
11G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Modifiche allo Schema
EsempioALTER TABLE Studenti ADD COLUMN
dataNascita DATE;ALTER TABLE Studenti ADD COLUMN
luogoNascita VARCHAR(20);ALTER TABLE Studenti ADD COLUMN
reddito DECIMAL(8,2);ALTER TABLE Studenti RENAME COLUMN
dataNascita TO dataDiNascita;ALTER TABLE Studenti DROP COLUMN
dataDiNascita;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
12G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Modifiche allo Schema
Semantica dell’aggiunta di colonnela nuova colonna viene aggiunta allo schemaa tutte le ennuple viene aggiunto NULLoppure il valore standard se è stato specif.
Semantica dell’eliminazione di colonnela colonna viene eliminata dallo schema,
assieme agli eventuali vincoli relativiviene effettuata la proiezione delle ennuple
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
13G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Modifiche allo Schema
Aggiunta di vincoliALTER TABLE <nome> ADD CONSTRAINT
<nome vincolo> <def. vincolo di tabella>;l’istanza deve rispettare il vincolo
EsempioALTER TABLE Studenti ADD CONSTRAINT cf
UNIQUE (nome, cognome, dataNascita, luogoNascita);
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
14G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Modifiche allo Schema
Eliminazione di vincoliALTER TABLE <nome> DROP CONSTRAINT
<nome vincolo>;
EsempioALTER TABLE Studenti DROP CONSTRAINT cf;
Attenzione:molti DBMS non supportano nè DROP
COLUMN, né DROP CONSTRAINT
SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle
15G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Viste
Vistetabelle “virtuali”definite attraverso un’interrogazionepossono essere utilizzate come tabelle reali
Due funzioni fondamentalicreazione degli schemi esterni (privatezza
dei dati o ristrutturazioni)semplificazione di interrogazioni ricorrenti
SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste
16G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Viste
Creazione di visteCREATE VIEW <nome> AS <SELECT>;
Semanticala vista viene ricalcolata sulla base della sua
definizione ogni volta che viene usata Eliminazione di viste
DROP VIEW <nome>;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste
17G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Viste
Privatezza: esami senza votiCREATE VIEW EsamiSenzaVoti AS SELECT studente, corso FROM Esami;
SELECT * FROM EsamiSenzaVoti;
SELECT * FROM Studenti, EsamiSenzaVotiWHERE matr=studente;
DROP VIEW EsamiSenzaVoti;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste
18G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Viste
Compiti ricorrenti: professori e numeriCREATE VIEW ProfessoriNumeri AS SELECT codice, nome, cognome, numero FROM Professori JOIN Numeri ON cod=professore;
SELECT * FROM ProfessoriNumeriORDER BY cognome, nome;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste
19G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Viste
Differenza tra tabelle e vistele tabelle sono materializzate nella base di
dati, le viste no (sono derivate dalle tabelle)schema di una vista = attributi e tipi della
selectistanza di una vista = risultato della selectle tabelle sono aggiornabili, le viste nole viste sono sempre aggiornate e consistentinon hanno impatto sulle prestazioni
SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste
20G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Indici
Aggiunta di indici CREATE [UNIQUE] INDEX <nome> ON
<tabella>(<attributi>);UNIQUE: impone un vincolo di chiave sugli
attributi Esempio:
CREATE INDEX annociclo ON Studenti(anno, ciclo);
SQL-92 >> Dettagli e Approdondimenti >> DDL: Indici
21G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DDL: Indici
Annotazioniindici secondariIn alcuni sistemi (es: PgSQL) anche il tipo di
indice (BTREE, HASH, ecc.)attenzione all’impatto sulle prestazioni
Eliminazione di indiciDROP INDEX <nome>;
EsempioDROP INDEX annociclo;
SQL-92 >> Dettagli e Approdondimenti >> DDL: Indici
22G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DCL “Data Control Language”
Due funzioni principalicreazione ed eliminazione di utenticoncessione e revoca di autorizzazionisintassi non standard
UtentiCREATE USER, DROP USER
AutorizzazioniGRANT, REVOKE
SQL-92 >> Dettagli e Approdondimenti >> DCL
23G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Creazione ed Eliminazione di Utenti Esempio: in PgSQL
CREATE USER <nome> [WITH [PASSWORD ‘<password>’] [CREATEDB] [CREATEUSER]];
es: CREATE USER pguser WITH PASSWORD‘pguser’ CREATEDB;
inserimenti nella tabella pg_shadow Eliminazione di utenti
DROP USER <nome>;es; CREATE USER pguser;
SQL-92 >> Dettagli e Approdondimenti >> DCL
24G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Concessione e Revoca di privilegi
Autorizzazioninon tutti gli utenti sono autorizzati ad
accedere alle basi di datitipicamente: l’utente che crea la base di dati
e/o le tabelle (il proprietario) è autorizzato a fare tutto
gli altri utenti non possono fare niente il proprietario può concedere autorizzazioni
ad altri utenti
SQL-92 >> Dettagli e Approdondimenti >> DCL
25G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Concessione e Revoca di privilegi
Istruzione GRANTGRANT <privilegi> ON <risorsa>
TO <utente> [WITH GRANT OPTION];<privilegi>: SELECT, INSERT, DELETE,
UPDATE, REFERENCES, ALL<risorsa>: tabella o vista<utente>: nome oppure PUBLICWITH GRANT OPTION: l’utente può
trasmettere i privilegi con l’istruzione GRANT
SQL-92 >> Dettagli e Approdondimenti >> DCL
26G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Concessione e Revoca di Privilegi
EsempiGRANT ALL ON Studenti TO pguser;GRANT SELECT ON Professori TO pguser WITH GRANT OPTION;
GRANT SELECT ON EsamiSenzaVoti TO PUBLIC;
Revoca di privilegiREVOKE <privilegio> ON <risorsa>
FROM <utente>;es: REVOKE DELETE ON Studenti FROM pguser;
SQL-92 >> Dettagli e Approdondimenti >> DCL
27G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Schemi Esterni
Costruzione dello schema logicol’utente o il DBA creano la base di datil’utente o il DBA creano lo schema
Costruzione degli schemi esternil’utente o il DBA definiscono eventuali vistel’utente o il DBA definiscono le autorizzazioni
Schema esterno di un utenteinsieme delle risorse visibili all’utente
SQL-92 >> Dettagli e Approdondimenti >> DCL
28G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DML: Aggiornamenti
CancellazioniDELETE FROM <tabella> [<WHERE>];es: DELETE FROM Professori WHERE qualifica=‘supplente’;
ModificheUPDATE <tabella> SET
<attributo>=<espressione> [<WHERE>];es: UPDATE Professori SET qualifica=‘ordinario’ WHERE cod=‘VC’;
SQL-92 >> Dettagli e Approdondimenti >> DML: Aggiornamenti
29G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Inserimenti
Istruzione INSERTdue forme
Una ennupla alla voltavengono specificati i valori della ennupla
Più ennuple alla voltaviene specificata una SELECTtutto il risultato della SELECT viene inserito
nella tabella
SQL-92 >> Dettagli e Approdondimenti >> DML: Aggiornamenti
30G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Inserimenti
Una ennupla alla voltaINSERT INTO <tabella> VALUES (<valori>);
Non è necessario specificare tutti i valorilista di attributi assieme alla tabellai valori corrispondono ordinatamente agli attr.altri attributi: NULL oppure DEFAULT
EsempioINSERT INTO Corsi(cod, titolo) VALUES (‘BD’, ‘Basi di Dati’);
SQL-92 >> Dettagli e Approdondimenti >> DML: Aggiornamenti
31G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Inserimenti
Più ennuple alla volta (“copia” di ennuple)INSERT INTO <tabella> <SELECT>;tutti o parte degli attributi (corrispondenza)
Esempio:
SQL-92 >> Dettagli e Approdondimenti >> DML: Aggiornamenti
CREATE TABLE CorsiTriennale ( cod char(3) PRIMARY KEY, titolo varchar(20), docente char(4) REFERENCES Professori(cod) );
INSERT INTO CorsiTriennaleSELECT cod, titolo, docenteFROM CorsiWHERE ciclo=‘laurea tr.’;
differenza con le viste
32G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DML: Interrogazioni
Istruzione SELECTuna sintassi concreta per esprimere
operazioni dell’algebra relazionale Interrogazioni, forma generale
più blocchi SELECT correlati da operatori insiemistici, UNION, INTERSECT, EXCEPT
blocco SELECT: fatto di varie clausole
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
33G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DML: Interrogazioni
SQL-92 >> Dettagli e Approfondimenti >> DML: Interrogazioni
UNION, INTERSECT, EXCEPT
Sottointerrogazione
Sottointerrogazione
ORDER BY
FROM
WHERE
SELECT
U oppure ∩ oppure –
Sottointerrogazione
Sottointerrogazione
ORDER BY
DISTINCT
tabelle con X o
34G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DML: Interrogazioni
Blocco SELECTSELECT [DISTINCT] <proiezioni e ridenom.>FROM <tabelle, prod. cartesiani, join, alias>[WHERE <selezioni>][ORDER BY <attributi>];
Clausole obbligatorieSELECT e FROMWHERE e ORDER BY sono opzionali
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
35G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Esempi
“Titolo dei corsi tenuti dal Professor Francesco Totti, in ordine alfabetico”
SQL-92 >> Dettagli e Approfondimenti >> DML: Interrogazioni
SELECT titolo
Risultato = ORDER BY titolo (
Corsi docente=cod Professori
cognome=‘Totti’ AND nome=‘Francesco’ (
)
titolo (
)
FROM Corsi JOIN Professori ON docente=cod
WHERE cognome=‘Totti’ AND nome=‘Francesco’
ORDER BY titolo
)
36G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Esempi
“Nome e cognome degli studenti il cui tutor è Pasquale Bruno”
SQL-92 >> Dettagli e Approfondimenti >> DML: Interrogazioni
SELECT Studenti.cognome, Studenti.nome
Risultato =
Studenti Studenti.matr=studente Tutorato
)
Tutor.cognome=‘Bruno’ AND Tutor.nome=‘Pasquale’ (
)
Studenti.cognome, Studenti.nome (
FROM Studenti JOIN Tutorato ON Studenti.matr=studente
WHERE Tutor.cognome=‘Bruno’ AND Tutor.nome=‘Pasquale’
JOIN Studenti AS Tutor ON tutor=Tutor.matr
tutor=Tutor.matr (Studenti AS Tutor)
37G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
DML: Interrogazioni
Suggerimenti metodologiciper scrivere l’interrogazione SQL, ragionare
sugli operatori dell’algebra necessariseguire l’ordine di scrittura delle clausole
suggerito dalla forma standardragionare sulla struttura e sul contenuto dei
risultati intermedi
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
38G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Operatori Insiemistici
Eliminano i duplicati E’ possibile mantenere i duplicati
UNION ALL, INTERSECT ALL, EXCEPT ALL
Esempio: professori e studenti
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
SELECT cognome, nomeFROM Professori
SELECT cognome, nomeFROM Studenti;
UNION
SELECT cognome, nomeFROM Professori
SELECT cognome, nomeFROM Studenti;
UNION ALL
39G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Operatori Insiemistici
Ordinamentile SELECT coinvolte non possono contenere
ORDER BYun’unica ORDER BY finale per il risultato
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
SELECT cognome, nomeFROM ProfessoriORDER BY cognome
SELECT cognome, nomeFROM Studenti;
UNION
SELECT cognome, nomeFROM Professori
SELECT cognome, nomeFROM StudentiORDER BY cognome;
UNION
(
)
40G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Clausola SELECT
DISTINCT, proiezioni, ridenominazioni Eventuali funzioni aggregative
COUNT, SUM, MAX, MIN, AVGDISTINCT
Esempio: contare le facoltà dei professori
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
SELECT COUNT(facolta)FROM Professori
SELECT COUNT(DISTINCT facolta))FROM Professori
risultato scorretto, uguale al numero dei professori
risultato corretto, uguale al numerodi facoltà distinte
41G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Espressioni
Possono comparire nella SELECT Operandi
valori degli attributi Operatori (non standard)
operatori aritmetici +, -, *, % ed altrifunzioni matematiche log, exp, sin, …funzioni su stringhe length, substring, …funzioni su date e tempi
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
42G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Espressioni
Esempio: reddito familiare in lireSELECT cognome, nome, reddito*1936.27FROM Studenti;
Esempio: media degli esami dello studente Pasquale Bruno in 110miSELECT AVG(voto)/30*110 AS media110miFROM Studenti JOIN Esami ON cod=studenteWHERE cognome=‘Bruno’ AND nome=‘Pasquale’;
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
43G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Clausola FROM
Tabelle, prodotti cartesiani, join e alias Join
FROM R [INNER] JOIN S ON A=B Altre forme di join
FROM R NATURAL JOIN SFROM R LEFT [OUTER] JOIN S ON A=BFROM R RIGHT [OUTER] JOIN S ON A=BFROM R FULL [OUTER] JOIN S ON A=B
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
44G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Join Esterni
Esempio: tutti i professori con i loro eventuali numeri telefonici
SELECT Professori.*, numeroFROM Professori LEFT OUTER JOIN Numeri ON cod=professore;
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
45G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Clausola WHERE
Condizioni di selezionecondizioni sui valori degli attributioperatori di confronto =, >, <, >=, <=, <>espressioni con operatori e funzioniconnettivi booleani AND, OR, NOT
Operatori specialiIS NULL, IS NOT NULLLIKE
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
46G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Operatore LIKE
Operatore LIKEcorrispondenza “parziale” tra valori testuali
“Pattern”sequenza di caratteri e simboli speciali%: una sequenza di 0 o più caratteri_ : un carattere qualsiasicorrisponde ad un insieme di stringhe
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
47G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Operatore LIKE
Esempi:‘B%i’: {‘Bianchi’, ‘Belli’, ‘Brutti’, ‘Bi’, …}‘p_ _ _a’: {‘palla’, ‘pasta’, ‘pista’, …}‘A_t%’: {‘Antonio’, ‘Artrite’, …}
Condizioni<attributo di tipo testo> LIKE <pattern>vera se il valore dell’attributo appartiene
all’insieme di stringhe corrispondenti
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
48G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Operatore LIKE
EsempiSELECT cognome, nomeFROM StudentiWHERE cognome LIKE ‘A%’;
SELECT *FROM CorsiWHERE titolo LIKE ‘%programmazione%’;
SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni
49G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Dettagli e Approfondimenti
DDL: Tabellevalori di defaultvincoli di riferimentomodifiche allo schema
DDL: Vistedefinizione e uso
DDL: Indici DCL
utenti
autorizzazionischemi esterni
DML: Aggiornamentiinserimenti
DML: Interrogazionioperatori insiemisticiSELECT: espressioniFROM: joinWHERE: op. like
SQL-92 >> Sommario
50G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
SQL-92 >> Dettagli e Approfondimenti >> La Base di Dati di Esempio
CREATE TABLE Studenti ( matr integer PRIMARY KEY, cognome varchar(20) NOT NULL, nome varchar(20) NOT NULL, ciclo char(20), anno integer, relatore char(4) REFERENCES Professori(cod));
CREATE TABLE Professori ( cod char(4) PRIMARY KEY, cognome varchar(20) NOT NULL, nome varchar(20) NOT NULL, qualifica char(15), facolta char(10) );
CREATE TABLE Tutorato ( studente integer REFERENCES Studenti(matr), tutor integer REFERENCES Studenti(matr), PRIMARY KEY (studente,tutor));
CREATE TABLE Esami ( studente integer REFERENCES Studenti(matr) ON DELETE cascade ON UPDATE cascade, corso char(3) REFERENCES Corsi(cod), voto integer, lode bool, CHECK (voto>=18 and voto<=30), CHECK (not lode or voto=30), PRIMARY KEY (studente, corso));
CREATE TABLE Corsi ( cod char(3) PRIMARY KEY, titolo varchar(20) NOT NULL, ciclo char(20), docente char(4) REFERENCES Professori(cod) );
CREATE TABLE Numeri ( professore char(4) REFERENCES Professori(cod), numero char(9), PRIMARY KEY (professore,numero));
51G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
SQL-92 >> Dettagli e Approfondimenti >> La Base di Dati di Esempio
Tutorato T
studente INTEGER PK, FK
tutor INTEGER PK, FK
Studenti T
matr INTEGER PK
cognome VARCHAR(20)
nome VARCHAR(20)
ciclo CHAR(20)
anno INTEGER
relatore CHAR(4) FK
Professori T
cod CHAR(4) PK
cognome VARCHAR(20)
nome VARCHAR(20)
qualifica CHAR(15)
facolta CHAR(10)
Esami T
corso CHAR(3) PK, FK
studente INTEGER PK, FK
voto INTEGER
lode BOOL
Corsi T
codice CHAR(3) PK
titolo VARCHAR(20)
ciclo CHAR(20)
docente CHAR(4) FK
Numeri T
numero CHAR(9) PK
docente CHAR(4) PK, FK
52G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
SQL-92 >> Dettagli e Approfondimenti >> La Base di Dati di Esempio
cod cognome nome qualifica facolta
FT Totti Francesco ordinario Ingegneria
CV Vieri Christian associato Scienze
ADP Del Piero Alessandro supplente null
Professori
matr cognome nome ciclo anno relatore
111 Rossi Mario laurea tr. 1 null
222 Neri Paolo laurea tr. 2 null
333 Rossi Maria laurea tr. 1 null
444 Pinco Palla laurea tr. 3 FT
77777 Bruno Pasquale laurea sp. 1 FT
88888 Pinco Pietro laurea sp. 1 CV
Studenti
cod titolo ciclo docente
PR1 Programmazione I laurea tr. FT
ASD Algoritmi e Str. Dati laurea tr. CV
INFT Informatica Teorica laurea sp. ADP
Corsi
53G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
SQL-92 >> Dettagli e Approfondimenti >> La Base di Dati di Esempio
studente tutor
111 77777
222 77777
333 88888
444 88888
Tutorato
studente corso voto lode
111 PR1 27 false
222 ASD 30 true
111 INFT 24 false
77777 PR1 21 false
77777 ASD 20 false
88888 ASD 28 false
88888 PR1 30 false
88888 INFT 30 true
Esami
professore numero
FT 0971205145
FT 347123456
VC 0971205227
ADP 0971205363
ADP 338123456
Numeri
54G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati
Termini della Licenza
Termini della Licenza
This work is licensed under the Creative Commons Attribution-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.