Il 0% ha trovato utile questo documento (0 voti)
7 visualizzazioni20 pagine

MySQL FK

Esercizio sql

Caricato da

Simone Libero
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
7 visualizzazioni20 pagine

MySQL FK

Esercizio sql

Caricato da

Simone Libero
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 20

Il Linguaggio SQL

1
Linguaggi per DBMS
Il modello relazionale definisce i concetti generali
ed i vincoli per modellare e strutturare i dati di
una certa applicazione o dominio d’interesse.

Q. Come implementare il modello relazionale di


un DB all’interno di un RDBMS?
Q.1 Come costruire lo schema del DB?
Q.2 Come manipolare le istanze?

A. Attraverso opportuni linguaggi data-oriented!


2
SQL: DDL
Il vincolo primary key impone che
l’attributo/attributi su cui sia applica non presenti
valori comuni in righe differenti e non assuma
valori NULL→ ossia che l’attributo/i sia una
chiave primaria.
Due sintassi:
➢ Attributo Dominio [ValDefault] primary key
Se la chiave è un solo attributo.
➢ primary key(Attributo1, Attributo2, ..)
Se la chiave e’ composta da piu’ attributi.
3
SQL: DDL
Il vincolo primary key impone che
l’attributo/attributi su cui sia applica non presenti
valori comuni in righe differenti e non assuma
valori NULL→ ossia che l’attributo/i sia una
chiave primaria.
IMPORTANTE: A differenza di unique e not
null che possono essere definiti su più attributi
della stessa tabella, il vincolo primary key deve
apparire una sola volta per tabella.

4
SQL: DDL
Esempio: Chiave composta da due attributi.

IMPIEGATI
Codice Nome Cognome Ufficio
123 Marco Marchi A

CREATE TABLE IMPIEGATI (


CODICE SMALLINT NOT NULL,
UFFICIO CHARACTER NOT NULL,
PRIMARY KEY (CODICE, UFFICIO)
)

5
SQL: DDL
Esempio: Chiave composta da un solo attributo.

MAGAZZINO
Articolo Tipo Marca Prezzo
1 PC HP 19000

CREATE TABLE IMPIEGATI (


ARTICOLO INTEGER NOT NULL
AUTO_INCREMENT PRIMARY KEY,

)

6
SQL: DDL
I vincoli references e foreign key
consentono di definire dei vincoli di integrità
referenziale tra i valori di un attributo nella tabella
in cui è definito (tabella interna) ed i valori di un
attributo in una seconda tabella (tabella esterna).

NOTA: L’attributo/i cui si fa riferimento nella


tabella esterna deve/devono essere soggetto/i al
vincolo unique.

7
SQL: DDL
I vincoli references e foreign key consentono di definire dei vincoli di
integrità referenziale tra i valori di un attributo nella tabella in cui e’ definito
(tab interna) e i valori di un attributo in una seconda tabella (tab esterna).

Associazione 1 a molti
con partecipazione
obbligatoria

CORSI ESAMI

Nome Codice IdDocente Corso Matricola Voto

Basi di dati 0121 00 0121 4324235245 30L

Programmazione 1213 01 1213 4324235245 25

Sistemi Operativi 1455 02 1213 9854456565 18

8
SQL: DDL
CORSI ESAMI

Nome Codice IdDocente Corso Matricola Voto

Basi di dati 0121 00 0121 4324235245 30L

Programmazione 1213 01 1213 4324235245 25

Sistemi Operativi 1455 02 1213 9854456565 18

CORSI(Nome,Codice,IdDocente)
ESAMI(Corso,Matricola,Voto)

CREATE TABLE ESAMI (


CORSO VARCHAR(4) REFERENCES CORSI(CODICE)
STUDENTE VARCHAR(20),
PRIMARY KEY(CORSO, MATRICOLA),

)
9
SQL: DDL
CORSI ESAMI

Nome Codice IdDocente Corso Matricola Voto

Basi di dati 0121 00 0121 4324235245 30L

Programmazione 1213 01 1213 4324235245 25

Sistemi Operativi 1455 02 1213 9854456565 18

CREATE TABLE ESAMI (


CORSO VARCHAR(4)
STUDENTE VARCHAR(20),
PRIMARY KEY(CORSO, MATRICOLA),
FOREIGN KEY(CORSO) REFERENCES
CORSI(CODICE)…
) 10
SQL: DDL
Il costrutto foreign key si utilizza nel caso il
vincolo di integrità referenziale riguardi più di un
attributo delle tabelle interne/esterne.

CREATE TABLE STUDENTE {


MATRICOLA CHARACTER(20) PRIMARY KEY,
NOME VARCHAR(20),
COGNOME VARCHAR(20),
DATANASCITA DATE,
FOREIGN KEY(NOME,COGNOME,DATANASCITA) REFERENCES
ANAGRAFICA(NOME,COGNOME,DATA)
);

11
SQL: DDL
ESAMI CORSI

Corso Studente Voto Nome Codice IDDocente


0121 4324235245 30L Basi di dati 6464 00

1213 4324235245 25 Programmazione 1213 01


1213 9854456565 18 Sistemi Operativi 1455 02

TABELLA INTERNA TABELLA ESTERNA

Q. Che accade se un valore nella tabella esterna viene


cancellato o viene modificato?

A. Il vincolo di integrità referenziale nella tabella interna


potrebbe non essere più valido! Cosa fare?
12
SQL: DDL
ESAMI CORSI

Corso Studente Voto Nome Codice IDDocente


0121 4324235245 30L Basi di dati 6464 00

1213 4324235245 25 Programmazione 1213 01


1213 9854456565 18 Sistemi Operativi 1455 02

TABELLA INTERNA TABELLA ESTERNA

Q. Che accade se un valore nella tabella esterna viene


cancellato o viene modificato?

A. Il vincolo di integrità referenziale nella tabella interna


potrebbe non essere più valido! Cosa fare?
13
SQL: DDL
E’ possibile associare azioni specifiche da eseguire
sulla tabella interna in caso di violazioni del
vincolo di integrità referenziale.

on (delete | update)
(cascade | set null | set default| no action)

➢ cascade → elimina/aggiorna righe (della tabella interna)


➢ set null → setta i valori a null
➢ set default → ripristina il valore di default
➢ no action → non consente l’azione (sulla tabella esterna)

14
SQL: DDL
AZIONE NON PERMESSA!
ESAMI CORSI

Corso Studente Voto Nome Codice IDDocente


0121 4324235245 30L Basi di dati 6464 00

1213 4324235245 25 Programmazione 1213 01


1213 9854456565 18 Sistemi Operativi 1455 02

CREATE TABLE ESAMI (


CORSO VARCHAR(4) REFERENCES CORSI(CODICE)
ON DELETE NO ACTION
ON UPDATE CASCADE
STUDENTE VARCHAR(20),
PRIMARY KEY(CORSO, STUDENTE),

)
15
SQL: DDL
ESAMI CORSI

Corso Studente Voto Nome Codice IDDocente


0121 4324235245 30L Basi di dati 6464 00

0001 4324235245 25 Programmazione 1213 01

0001 9854456565 18 Sistemi Operativi 1455 02

CREATE TABLE ESAMI (


CORSO VARCHAR(4) DEFAULT 0001
REFERENCES CORSI(CODICE)
ON DELETE SET DEFAULT
ON UPDATE CASCADE
STUDENTE VARCHAR(20),
PRIMARY KEY(CORSO, STUDENTE),

)
16
SQL: DDL
ESAMI CORSI

Corso Studente Voto Nome Codice IDDocente


0121 4324235245 30L Basi di dati 6464 00

NULL 4324235245 25 Programmazione 1213 01

NULL 9854456565 18 Sistemi Operativi 1455 02


ERRORE!
CREATE TABLE ESAMI (
CORSO VARCHAR(4) REFERENCES CORSI(CODICE)
ON DELETE SET NULL
ON UPDATE CASCADE
STUDENTE VARCHAR(20),
PRIMARY KEY(CORSO, STUDENTE),

)
17
Riepilogo: Vincoli di ennupla e di integrità

I vincoli di integrità referenziale possono essere dichiarati


con la seguente clausola:

Le colonne <Attributo1>, ..., <AttributoN> rappresentano la chiave


esterna e corrispondono alle colonne <Attr1>, ... <AttrN> che formano la
chiave primaria della tabella <NOMETABELLA>.
Vincoli di ennupla e di integrità
Vincoli di integrità
Esempio: DB dipendenti in azienda

AZIENDA(Codice, RagioneSociale, Fatturato, NumDip)

DIPENDENTE (CodDip, Nome, Cognome, data_nasc, data ass, livello, stipendio, CodAzienda)

Creare le due tabelle del database con i vincoli adatti e in seguito si inseriscano i dati
Per le politiche di aggiornamento ed eliminazione si usino le seguenti, testandole:
FOREIGN KEY(CodAzienda) REFERENCES AZIENDA(Codice)
ON DELETE NO ACTION
ON UPDATE CASCADE

Potrebbero piacerti anche