SQL Per la definizione di basi di dati

SQL Per la definizione
di basi di dati
SQL per definire ed amministrare


Ogni utente puo’ definire una base di dati di cui
diventa l’amministratore potendo stabilire gli
accessi di eventuali altri utenti alla sua base di
dati.
La creazione consiste nel definire
incrementalmente uno schema con un certo
nome
 Tutti
gli elementi dello schema vengono registrati in
un catalogo.
Create Schema
CREATE SCHEMA Nome
AUTHORIZATION Utente
Definizioni
 Dove:

 Si
crea lo schema chiamato Nome
 Utente e’ l’amministratore dello schema
 Le Definizioni creano gli elementi dello
schema (Tabelle,Viste,Indici,etc…)
DROP SCHEMA
DROP SCHEMA Nome [RESTRICT |
CASCADE]
 cancella lo schema Nome
 Restrict: drop non viene eseguito se il
database non e’ vuoto.
 Cascade: Vengono rimossi
automaticamente tutti i dati presenti nel
database

Create Table
CREATE TABLE Nome

“(“Attributo Tipo[Vincolo {,Vincolo}]

{,Attributo Tipo[Vincolo {,Vincolo}]}”)”

[VincoloDiTabella {, VincoloDiTabella}]

Tipi elementari
CHAR(n) stringhe di lunghezza n
 VARCHAR(n) stringhe di lunghezza
variabile con al massimo n caratteri
 INTEGER interi
 REAL reali
 NUMERIC (p,s) p cifre di cui s decimali
 FLOAT(p) binari con p cifre significative
 DATE ,TIME per date ed ore.

Esempi
CREATE TABLE Studenti

(Nome CHAR(30), Matricola INTEGER,
Indirizzo CHAR(30),Telefono
INTEGER)


CREATE TABLE FuoriCorso LIKE Studenti
Altri modi di definire tabelle
CREATE TABLE Nome AS EsprSelect
 Esempio

 CREATE
TABLE EsamiBuoni
LIKE Esami AS SELECT *
FROM Esami
WHERE Voto > 27
Tabelle Virtuali (View)


Oltre alle tabelle di base che fanno parte dello
schema si possono creare delle tabelle
ausiliarie,virtuali che servono per vari scopi
(sicurezza, abbreviazione,etc..)
In genere, non possono essere modificate da
Insert,Delete,Update
 Alcuni
DBMS comunque danno la possibilita’ di
aggiornare le VIEWS (Updatable VIEWS)

CREATE VIEW NomeVista
[“(” Attributo {,Attributo} “)”]
AS Espressione
Esempi

CREATE VIEW
MediaVoti (Matricola,Media)
AS SELECT Matricola, AVG(Voto)
FROM Esami
GROUP BY Matricola
Le view possono essere usate
come tabelle






SELECT Nome,Media
FROM Studenti, MediaVoti
WHERE
Studenti.Matricola = MediaVoti.Matricola
DROP (Tabella | Vista) [RESTRICT|CASCADE]
con RESTRICT non viene cancellata se e’
utilizzata in altre viste, altrimenti CASCADE
rimuovera’ tutte le tabelle e viste che la usano.
Uso delle view
Semplificare query complesse
 Esempio: non possiamo scrivere
 SELECT AVG(COUNT(*))
 FROM AGENTI
 GROUP BY ZONE
 Perche’ AVG deve agire sui valori di un
attributo.

Usando le view…




CREATE VIEW AgPerZona (Zona,NumAg)
AS SELECT Zona,COUNT(*)
FROM AGENTI
GROUP BY Zona

SELECT AVG(NumAg)
FROM AgPerZona

DROP AgPerZona

Uso delle View per Sicurezza








CREATE VIEW EsamiPublici
AS SELECT Corso,Voto
FROM Esami
Data la tabella
ClientiBanca(Nome,Indirizzo,Saldo)
CREATE VIEW ClientiInd
AS SELECT Nome,Indirizzo
FROM ClientiBanca
Nascondere ad utenti
l’organizzazione dei dati












Se vogliamo assegnare un’intera zona ad un unico supervisore
1) CREATE TABLE Zone
(Zona CHAR(8), Supervisore CHAR(3))
AS SELECT DISTINCT Zona,Supervisore
FROM Agenti
2) CREATE TABLE NuoviAgenti
AS SELECT CodiceAgente,Nome,Zona,Commissione
FROM Agenti
3) DROP Agenti
4) CREATE VIEW Agenti
AS SELECT *
FROM NuoviAgenti NATURAL JOIN Zone