Anteprima
Vedrai una selezione di 6 pagine su 24
Basi di dati, Catarci, riassunto Pag. 1 Basi di dati, Catarci, riassunto Pag. 2
Anteprima di 6 pagg. su 24.
Scarica il documento per vederlo tutto.
Basi di dati, Catarci, riassunto Pag. 6
Anteprima di 6 pagg. su 24.
Scarica il documento per vederlo tutto.
Basi di dati, Catarci, riassunto Pag. 11
Anteprima di 6 pagg. su 24.
Scarica il documento per vederlo tutto.
Basi di dati, Catarci, riassunto Pag. 16
Anteprima di 6 pagg. su 24.
Scarica il documento per vederlo tutto.
Basi di dati, Catarci, riassunto Pag. 21
1 su 24
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

I predefiniti sono:

 Per i caratteri o un singolo carattere:

o char (n) carattere di lunghezza n fissa, quindi occupa n byte anche la stringa è minore

o varchar(n) stringa di massimo n caratteri, occupa 1byte+ # caratteri della stringa

 numerici

o int (o smallint, bigint ) [UNSIGNED] dove con unsigned si intende i soli valori interi positivi

(di default è signed. Si usa quando non ci interessa la parte frazionaria.

o Numeric (p,s) quando il numero rappresentato è costituito in totale da p numeri di cui s

dopo la virgola. ES: numeric(3,1) : numeri da -99.9 a +99.9

o Float (m,d) per i numeri in virgola mobile. M è il numero di cifre dedicate alla mantissa, dla

precisione dell’esponente (che è un numero intero)

o Bit (n) sequenza fissa di n bit (cioè valori 0,1)

 Data, nel formato (‘aaaa-mm-gg’)

 Time nel formato (‘hh:mm:ss’)

 Timestamp (‘AAAAMMGGhhmmss’) per avere informazioni sul momento esatto in cui si è

sottoscritto un dato

 Boolean, per valori booleani che assumono valore true o false

 BLOB e CLOB per memorizzare dati di enormi dimensioni costituiti rispettivamente da valori binari

o caratteri. Possono solo essere memorizzati ma non usati nelle interrogazioni

I domini definiti dall’utente sono utili quando è necessario utilizzare un insieme di vincoli su più tabelle, così

in caso di modifica del dominio, tale cambiamento si propaga

su tutte le tabelle che utilizzano quel dominio. Nella sintassi

qui a fianco va specificato il nome del dominio e il tipo di dati

che contiene, facendo riferimento ai domini predefiniti (INT,

CHAR…); è inoltre possibile definire un valore di default e

l’insieme delle condizioni che devono soddisfare i dati. La parola

VALUE è la parola chiave usata per indicare il valore del dominio in

fase di definizione dello stesso.

Modifica/cancellazione di domini

Per modificare un dominio si utilizza la sintassi scritta di lato e

consiste nell’aggiungere/eliminare vincoli o valori di default. Bisogna

tuttavia osservare che in caso di modifica, essa viene accettata solo

se tutti i dati già presenti soddisfano il nuovo dominio, altrimenti non

viene accettato (riguarda anche il default se un dato è stato inserito

vuoto). Durante l’eliminazione è invece opportuno scegliere tra le

impostazioni restrict (utilizzata di default), che impedisce la

cancellazione in caso il dominio sia presente nella definizione di

qualche tabella, e cascade che sostituisce il dominio con uno

elementare, generando una reazione a cascata.

Vincoli

I vincoli di integrità sono quelli che devono essere soddisfatti da una tupla affinché essa sia legale e dunque

inseribile nella base di dati. Questi vincoli sono intrarelazionali se riguardano solo una relazione (vincoli di

dominio, not null,default,…) o interrelazionali se riguardano più relazioni

(foreign key).Considerando questa sintassi andiamo a vedere le varie

tipologie di vincoli.

I vincoli predefiniti sugli attributi sono:

 [NOT NULL| NULL] se può assumere il valore nulla in caso di mancanza di informazione o no

 [DEFAULT valore] usato per impostare il valore di default, in caso non sia specificato si usa NULL

 [UNIQUE] se non possono esserci valori duplicati per quell’attributo (insomma se è una chiave)

 [PRIMARY KEY] se oltre a non poterci essere duplicati nemmeno il valore NULL

 [REFERENCES NomeTabella [(NomeAttributo)] ] per definire un vincolo di chiave esterna su

NomeAttributo verso la primary key di NomeTabella

I vincoli predefiniti sulla tabella sono:

 [PRIMARY KEY (nome_attributo1, nome_attributo2, …)] identifica la chiave primaria come un

insieme di attributi. Se ne può avere una e una sola per tabella.

 [UNIQUE (nome_attributo1, nome_attributo2,…)] identifica una chiave candidata sull’insieme di

attributi

 [FOREIGN KEY (nome_attr1, nome_attr2, …) REFERENCES nome_tabella [(nome_attr1,

nome_attr2...)]] permette di definire vincoli di chiave esterna su più attributi

 (la differenza con quelli di prima è che quelli riguardavano un solo attributo, qui quando riguardano

due o più attributi contemporaneamente)

Inserimento dati nella tabella Per inserire i dati all’interno di una tabella già creata si utilizza

questa sintassi. Bisogna prestare attenzione ad alcune

questioni. Innanzitutto, se vengono inseriti gli attributi che si

vuole compilare, non è necessario né metterli nell’ordine in

cui sono nella tabella creata, ne mettere tutti quelli che riguardano la tabella. Se sono tutti quelli possibili

verranno compilati correttamente a prescindere dall’ordine, se un attributo non compare gli verrà

assegnato il valore di default o il valore null, se ciò non viola i vincoli. Se nella clausola INSERT non vengono

specificati gli attributi, il DBMS considererà tutti quelli definiti e nello stesso ordine in cui si trovano nella

tabella che si sta compilando; in caso di assenza di un valore il dato non può essere inserito. Si ricorda

nuovamente che in SQL le tabelle non sono relazioni ma multi-insiemi, quindi è necessario porre chiave e

chiave primaria per evitare di avere tuple uguali.

Cancellazione dati nella tabella Serve per eliminare le righe di una tabella. Se la condizione where

non è messa il DBMS cancella tutte le righe, altrimenti solo quelle

che soddisfano una determinata condizione (per esempio hanno

un certo valore in un campo). La where può contenere

interrogazioni annidate.

Aggiornamento tuple Per modificare tuple già esistenti. Viene prima considerata la

where per capire quali tuple saranno modificate, poi il set per

conoscere la modifica da effettuare.

Garantire il vincolo di integrità

Quando vi è un vincolo di integrità referenziale, bisogna stabilire che cosa succede alle tuple referenzianti in

caso di modifica/cancellazione della tabella referenziata. In

generale è possibile: impedire tale evento (NO ACTION), mettere

le righe della referenziate ai valori di default o nulla (SET DEFAULT

| SET NULL), o aggiornare il valore della referenziante a partire

dalla modifica avvenuta sulla referenziala (CASCADE). Questa

decisione va presa al momento della creazione di tabella con le

clausole ON DELETE e ON UPDATE.

Creazione o cancellazione schema e cancellazione tabella

Nella cancellazione del database come durante quella della

tabella si può decidere se impedirla a meno che non sia vuota

(restrict) oppure cancellarla e propagare la cancellazione

(cascade).

Modifica tabelle

Interrogazioni nidificate

Fino a questo momento abbiamo visto che la clausola where conteneva espressioni semplici o al più

collegate attraverso connettivi logici come and, or e not. Tuttavia, SQL permette di confrontare il valore di

una riga con il risultato di un’interrogazione SQL completa, si parla di interrogazioni nidificate. Così facendo

però si confronta un valore con una tabella (il risultato di un’interrogazione SQL è un multi-insieme), allora

bisogna utilizzare uno tra i seguenti costrutti:

 ANY significa che la riga soddisfa la condizione se risulta vero il confronto con almeno una delle

righe del risultato dell’interrogazione

 ALL significa che la riga soddisfa la condizione se risulta vero il confronto con tutte le righe della

nidificata

 IN

 NOT IN

 EXISTS, ammette come parametro un’interrogazione nidificata e restituisce come valore vero se il

risultato dell’interrogazione interna è non vuoto

 NOT EXISTS

Se le variabili di range dell’interrogazione esterna non vengono utilizzate in quella interna è possibile

effettuare una considerazione “semplice” delle interrogazioni nidificate secondo cui prima si esegue quella

interna e si memorizzano i risultati in una tabella temporanea, successivamente si esegue quella esterna

accedendo a tale tabella. Talvolta invece un’interrogazione fa riferimento ad una variabile di range (tabella)

definita nell’interrogazione esterna, in tal caso si parla di interrogazioni con correlazione e la visione

semplice non è più corretta. L’interrogazione interna non è infatti eseguita una sola volta per l’intera

correlazione esterna ma una volta per ogni riga dell’esterna analizzata (questo perché dipende

dall’esterna). Una volta definita una variabile di range essa può essere utilizzata nell’interrogazione stessa o

in una qualsiasi di livello inferiore (interna).

Se si utilizza exists nella tabella esterna (e quindi finale) ci saranno tutte le tuple della tabella esterna che

hanno fatto assumere il valore true ad exists.

Check, asserzioni e viste

Il vincolo di check è un particolare tipo di vincolo che può essere aggiunto durante la creazione di una

tabella ed è volto alla verifica che una tupla soddisfi dei

requisiti. La particolarità sta nel fatto che tale verifica

viene effettuata dopo l’inserimento della tupla e se risulta

violato il vincolo di check, essa viene eliminata (quindi te la

fa inserire ma poi la cancella). Le condizioni utilizzabili

sono le stesse che possono esserci nella where, quindi

anche interrogazioni annidate. Si può anche assegnare un nome al vincolo di check mediante l’istruzione

constraint. Il problema è che a volte è possibile aggirare i vincoli di

check poiché essi riguardano una tabella o un attributo,

per evitare ciò si utilizzano le asserzioni che sono vincoli

validi per ogni tabella e ogni attributo.

Check e asserzioni sono vincoli immediati, ovvero che vengono verificati ogni qual volta viene effettuata

un’operazione di modifica di una delle tabelle che coinvolgono. In caso di violazione viene eliminata

l’operazione di modifica (Rollback parziale). I vincoli differiti al contrario sono quelli che vengono verificati

in seguito ad una serie di operazioni dette transazioni. In questo caso se la verifica porta ad una violazione

dei vincoli, non si può sapere quale operazione ha causato questa situazione e l’intera transazione è

eliminata (Rollback).

Una vista è una tabella virtuale che non contiene effettivamente tuple ma è possibile ottenerle attraverso

la risoluzione di un’interrogazione SQL, è dunque

memorizzato come ottenerla. L’interrogazione interna,

che può contenere altre viste, deve restituire un’insieme

di attributi pari a quelli contenuti nello schema della

vista e nello stesso ordine. Per evitare che vengano

inserite tuple che non possono essere messe nella vista si mette un controllo sull’inserimento con “with

check option”. La vista può anche essere utile poiché SQL

non permette di mettere

Dettagli
A.A. 2016-2017
24 pagine
1 download
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher federica.mo1994 di informazioni apprese con la frequenza delle lezioni di Basi di dati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Roma La Sapienza o del prof Catarci Tiziana.