vuoi
o PayPal
tutte le volte che vuoi
Politica di violazione del vincolo di integrità referenziale
E' stata scelta come politica di violazione del vincolo di integrità referenziale l'opzione on delete set NULL in quanto una filiale continua ad esistere anche senza il direttore. Esiste un vincolo di chiave esterna tra il campo Id_località e il campo Id_località della relazione Luoghi. Tale vincolo consente di poter inserire solo valori legali di tupla sull'attributo Id_località.
E' stata scelta come politica di violazione del vincolo di integrità referenziale l'opzione on delete set NULL. Intestatari: Esiste un vincolo di chiave esterna tra il campo CodiceIBAN ed il campo CodiceIBAN della relazione Conti_Correnti. Tale vincolo consente di poter inserire solo valori legali di tupla sull'attributo CodiceIBAN.
E' stata scelta come politica di violazione del vincolo di integrità referenziale l'opzione on delete set CASCADE in quanto un cliente non può avere intestato un conto corrente che non esiste.
Esiste
sull'attributo Nome_Filiale. E' stata scelta come politica di violazione del vincolo di integrità referenziale l'opzione on delete Cascade. Filiali: Esiste un vincolo di chiave esterna tra il campo Nome e il campo Nome della relazione Filiali. Tale vincolo consente di poter inserire solo valori legali di tupla sull'attributo Nome.sull'attributo Nome_Filiale. E' stata scelta come politica di violazione del vincolo di integrità referenziale l'opzione on delete Cascade.Lavoratore Indipendente: Esiste un vincolo di chiave esterna tra il campo Id_cliente e il campo Id_codice della relazione clienti. Tale vincolo consente di poter inserire solo valori legali di tupla sull'attributo Id_cliente. E' stata scelta come politica di violazione del vincolo di integrità referenziale l'azione on delete Cascade.
Lavoratore Dipendente: Esiste un vincolo di chiave esterna tra il campo Id_cliente e il campo Id_codice della relazione clienti. Tale vincolo consente di poter inserire solo valori legali di tupla sull'attributo Id_cliente. E' stata scelta come politica di violazione del vincolo di integrità referenziale l'azione on delete Cascade.
Esiste un vincolo di chiave esterna tra il campo Datore_di_lavoro e il campo id_Datore della relazione Datore. Tale vincolo consente di poter inserire solo valori legali di tupla sull'attributo Datore_di_lavoro.
- vincoloconsente di poter inserire solo valori legali di tupla sull'attributo Datore_di_lavoro.E' stata scelta come politica di violazione del vincolo di integrità referenziale l'azione on delete Cascade.
- Progettazione Fisica
- Dimensionamento Tabelle
- Di seguito, riportiamo la tabella contenente le informazioni relative al dimensionamento delle singole relazioni, specificando nome,dimensione di ogni singola occorrenza, numero di occorrenze previste e il dimensionamento totale ottenuto moltiplicando i valori presentinella seconda e terza colonna ed arrotondando il risultato per eccesso.
Nome | Dimensione | Numero tuple | Dimensione tot. |
---|---|---|---|
Clienti | 55 Byte | 5000 | 230Kb |
Anagrafiche | 60 Byte | 5000 | 250Kb |
Luoghi | 50 Byte | 3000 | 159Kb |
Filiali | 62 Byte | 50 | 3,1Kb |
Direttori | 134 Byte | 50 | 6,5Kb |
Intestatari | 40 Byte | 10000 | 400Kb |
Scritture | 136 Byte | 1000000 | 136Mb |
Conti_Correnti | 76 Byte | 10000 | 760Kb |
Lavoratore Indipendente | 44 Byte | 3000 | 122Kb |
Lavoratore Dipendente | 60 Byte | 3000 |
180KbDatore 74 Byte 3000 222Kb
Analizzando le varie relazioni, per ciascuna di esse abbiamo ricavato lo spazio occupato dai relativi attributi in base al tipo.
Clienti:
- Nome attributo: Id_codice
- Tipo: Varchar2(20)
- Dimensione: 20 Byte
- Nome attributo: Codice_fiscale
- Tipo: Varchar2(20)
- Dimensione: 20 Byte
- Nome attributo: Codice_pin
- Tipo: Varchar2(10)
- Dimensione: 10 Byte
- Nome attributo: Residenza
- Tipo: char(5)
- Dimensione: 5 Byte
Anagrafica:
- Nome attributo: Codice_fiscale
- Tipo: Varchar2(20)
- Dimensione: 20 Byte
- Nome attributo: Nome
- Tipo: Varchar2(20)
- Dimensione: 20 Byte
- Nome attributo: Cognome
- Tipo: Varchar2(20)
- Dimensione: 20 Byte
Luoghi:
- Nome attributo: Id_Località
- Tipo: char(5)
- Dimensione: 5 Byte
- Nome attributo: Città
- Tipo: Varchar2(20)
- Dimensione: 20 Byte
- Nome attributo: Indirizzo
- Tipo: Varchar2(50)
- Dimensione: 50 Byte
- Nome attributo: CAP
- Tipo: numbeer
- Dimensione: 5 Byte
Filiali:
- Nome attributo: Nome
- Tipo: Varchar2(20)
- Dimensione: 20 Byte
- Nome attributo: telefono
- Tipo: number
- Dimensione: 4 Byte
- Nome attributo: Direttore
- Tipo: Varchar2(20)
- Dimensione: 20 Byte
- Nome attributo: Orario_apertura
- Tipo: Date
- Dimensione: 7 Byte
- Nome attributo: Orario_chiusura
- Tipo: Date
- Dimensione: 7 Byte
- Nome attributo: Id_località
- Tipo: char(5)
- Dimensione: 5 Byte
- Nome attributo: fax
- Tipo: number
- Dimensione: 4 Byte
Direttore:
- Nome attributo: Id_direttore
- Tipo: Varchar2(20)
- Dimensione: 20 Byte
- Nome attributo: Nome
- Tipo: Varchar2(20)
- Dimensione: 20 Byte
- Nome attributo: Cognome
- Tipo: Varchar2(20)
- Dimensione: 20 Byte
- Nome attributo: Indirizzo
- Tipo: Varchar2(50)
- Dimensione: 50 Byte
- Nome attributo: telefono
- Tipo: number
- Dimensione: 4 Byte
ByteE-mail Varchar2(20) 20 Byte Nome attributo Tipo Dimensione Id_direttore Varchar2(20) 20 Byte Nome Varchar2(20) 20 Byte Cognome Varchar2(20) 20 Byte Indirizzo Varchar2(50) 50 Byte telefono number 4 Byte E-mail Varchar2(20) 20 Byte Intestatari: Nome attributo Tipo Dimensione Id_cliente Varchar2(20) 20 Byte CodiceIBAN Varchar2(20) 20 Byte Scritture: Nome attributo Tipo Dimensione Id_scrittura Varchar2(20) 20 Byte CodiceIBAN Varchar2(20) 20 Byte causale Varchar2(50) 50 Byte valuta Varchar2(20) 20 Byte importo_entrata number 4 Byte importo_uscita number 4 Byte saldo number 4 Byte Data Date 7 Byte Orario Date 7 Byte Conti_Correnti: Nome attributo Tipo Dimensione CodiceIBAN Varchar2(20) 20 Byte Nome_Filiale Varchar2(20) 20 Byte Saldo_attuale Varchar2(20) 20 Byte Limite_giornaliero_op Number 4 Byte Limite_mensile_op Number 4 Byte Residuo_giornaliero_op Number 4 Byte Residuo_mensile_op Number 4 Byte Lavoratore Indipendente: Nome attributo Tipo Dimensione Id_cliente Varchar2(20) 20 Byte PartitaIVA Varchar2(20) 20
ByteFatturato_medio Number 4 ByteEntrate Nette Number 4 ByteLavoratori Dendenti: Nome attributo Tipo Dimensione Id cliente Varchar2(20) 20 ByteRagione_Sociale Varchar2(20) 20 ByteDatore_di_Lavoro Varchar2(20) 20 ByteDatore: Nome attributo Tipo Dimensione Id_Datore Varchar2(20) 20 ByteIndirizzo_datore_lavoro Varchar2(50) 50 ByteTelefono_datore_lavoro Number 4 ByteI calcoli sono stati effettuati tenendo conto delle seguenti considerazioni: - Char(k)=k Byte - Varchar2(k)=k Byte - Number=4 Byte - Date=7 Byte - Tablespace 7.2)Per memorizzare la mole di dati inerente alle relazioni sopra elencate abbiamo riservato un'area di memoria atta a contenerla, dettatablespace. Nome Dimensione Banca 200Mb La dimensione del tablespace è stata calcolata sommando lo spazio totale occupato da ogni singola tabella (879KB) in seguito arrotondata a 5 MB in virtù dello spazio previsto per i file di gestione e di sistema (che probabilmentesarà molto elevato a causa dell'utilizzo del tipo CLOB).Il codice SQL relativo alla sua creazione è il seguente:
create tablespace Bancadatafile 'Banca.dbf' size 200M autoextend off;
7.3) Script SQL
Qui di seguito sono riportati gli statement SQL per la creazione delle tabelle (CREATE TABLE) e dei vincoli di integrità referenziale (ALTER TABLE). Inoltre per ogni statement di CREATE TABLE sono state specificate le clausole di storage che descrivono come lo spazio riservato per ciascuna tabella viene da essa utilizzato, in particolare:
INITIAL: specifica la misura in byte dell'iniziale estensione della tabella.
NEXT: indica la misura per l'estensione successiva a initial.
MINEXTENTS: specifica il numero minimo di extents allocati.
MAXEXTENTS: specifica il numero massimo di extents allocati.
PCTINCREASE: indica la percentuale di incremento delle dimensioni delle extents dalla terza in poi relativa all'extent precedente.
Create table Clientii(
Id_codice Varchar2(20),
Codice_fiscale varchar2(20) NOT NULL,
Codice_pin
date,constraint PK_Clienti Primary Key(Id_codice))Storage ( Initial 184K Next 23K minextents 1 maxextents 1 PCTincrease 0)
Per la tabella Ricoveri il parametro INITIAL è stato posto pari a 207KB (90% di 230KB), in quanto dei circa 5000 clienti attesi solo di 4000 se ne conoscono le informazioni, mentre il parametro NEXT è stato posto pari a 23KB (10% di 230KB).
Create table Anagrafica(Nome Varchar2(20) NOT NULL,Codice_fiscale varchar2(20),Cognome Varchar2(20) NOT NULL,constraint PK_Anagrafica Primary Key(Codice_fiscale))Storage ( Initial 225K Next 25K minextents 1 maxextents 1 PCTincrease 0)
Per la tabella Anagrafica il parametro INITIAL è stato posto pari a 225KB (90% di 250KB), mentre il parametro NEXT è stato posto pari a 25KB (10% di 230KB). La motivazione è la stessa precedente in quanto ogni occorenza di cliente è in associazione 1a1 con un occorenza di anagrafica.
Create table Luoghi(Città
<table>
<tr>
<th>Colonna</th>
<th>Tipo</th>
<th>Vincolo</th>
</tr>
<tr>
<td>varchar2(20)</td>
<td>NOT NULL</td>
<td></td>
</tr>
<tr>
<td>Indirizzo</td>
<td>varchar2(20)</td>
<td>NOT NULL</td>
</tr>
<tr>
<td>Id_località</td>
<td>char(5)</td>
<td></td>
</tr>
<tr>
<td>CAP</td>
<td>Number(5)</td>
<td>NOT NULL</td>
</tr>
<tr>
<td>constraint PK_Luoghi</td>
<td>Primary Key(Id_località)</td>
<td></td>
</tr>
</table>
<table>
<tr>
<th>Colonna</th>
<th>Tipo</th>
<th>Vincolo</th>
</tr>
<tr>
<td>Nome</td>
<td>varhar2(20)</td>
<td></td>
</tr>
<tr>
<td>telefono</td>
<td>Number</td>
<td></td>
</tr>
<tr>
<td>Direttore</td>
<td>varchar2(20)</td>
<td></td>
</tr>
<tr>
<td>Orario_apertura</td>
<td>Date</td>
<td></td>
</tr>
<tr>
<td>Orario_chiusura</td>
<td>Date</td>
<td></td>
</tr>
<tr>
<td>Id_località</td>
<td>char(5)</td>
<td>NOT NULL</td>
</tr>
<tr>
<td>fax</td>
<td>Number</td>
<td></td>
</tr>
<tr>
<td>constraint PK_Filialii</td>
<td>Primary Key(Nome)</td>
<td></td>
</tr>
</table>
<table>
<tr>
<th>Colonna</th>
<th>Tipo</th>
<th>Vincolo</th>
</tr>
<tr>
<td>Nome</td>
<td>varhar2(20)</td>
<td>NOT NULL</td>
</tr>
<tr>
<td>telefono</td>
<td>Number</td>
<td></td>
</tr>
<tr>
<td>Id_direttore</td>
<td>varchar2(20)</td>
<td></td>
</tr>
<tr>
<td>Cognome</td>
<td>varchar2(20)</td>
<td>NOT NULL</td>
</tr>
<tr>
<td>E-mail</td>
<td>varchar2(20)</td>
<td></td>
</tr>
<tr>
<td>constraint PK_Direttore</td>
<td>Primary Key(Id_direttore)</td>
<td></td>
</tr>
</table>
<table>
<tr>
<th>Colonna</th>
<th>Tipo</th>
<th>Vincolo</th>
</tr>
<tr>
<td>Id_cliente</td>
<td>varhar2(20)</td>
<td></td>
</tr>
<tr>
<td>CodiceIBAN</td>
<td>...</td>
<td></td>
</tr>
</table>
<table>
<tr>
<th>varchar2(20)</th>
<th>constraint PK_Intestatari Primary Key(Id_cliente,CodiceIBAN)</th>
</tr>
<tr>
<td>Storage ( Initial 320K Next 80K minextents 1 maxextents 1 PCTincrease 0)</td>
</tr>
</table>
<table>
<tr>
<th>Create table Scritture</th>
</tr>
<tr>
<td>Id_scrittura varchar2(20),</td>
</tr>
<tr>
<td>CodiceIBAN varchar2(20) NOT NULL,</td>
</tr>
<tr>
<td>causale varchar2(20) NOT NULL,</td>
</tr>
<tr>
<td>valuta varchar2(20) NOT NULL,</td>
</tr>
<tr>
<td>importo_entrata Number NOT NULL,</td>
</tr>
<tr>
<td>importo_uscita Number NOT NULL,</td>
</tr>
<tr>
<td>Data Date NOT NULL,</td>
</tr>
<tr>
<td>Orario, Date NOT NULL,</td>
</tr>
<tr>
<td>constraint PK_Scritture Primary Key(Id_scrittura)</td>
</tr>
<tr>
<td>Storage ( Initial 100M Next 20M minextents 1 maxextents 1 PCTincrease 0)</td>
</tr>
</table>
<table>
<tr>
<th>Create table Conti_Correnti</th>
</tr>
<tr>
<td>Nome_Filiale varchar2(20) NOT NULL,</td>
</tr>
<tr>
<td>Codi</td>
</tr>
</table>