Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
ESERCIZIO OPERAZIONI
FOR EACH ROW WHEN NEW.nome = "viti" AND NEW.scorta < 50 INSERT INTO Ordini (mat, forn, numero) SELECT G.codp, F.codf, 500 FROM Grezzo AS G, Qualità AS Q, Fornitore AS F, Produce AS P WHERE Q.forn = F.codf AND P.forn = F.codf AND P.parte = G.codp AND G.nome ="viti" AND Q.giudizio = (SELECT MAX (Q1.giudizio) FROM Qualita as Q1, Produce AS P1, Grezzo AS G1 WHERE Q1.forn = P1.forn AND P1.parte = G1.codp AND G1.nome = "viti") LIMIT 11. il costo di una scrittura è di 2 volte quello di una lettura, 2. vi sono 10000 libri e 30 editori, 3. per ogni editore vi sono 10 ordini in media
Le operazioni di interesse sono
op1: costo globale degli ordini per un certo editore, eseguita 40 volte al giorno
op2: inserire ordine ad un certo editore, eseguita 1 volta all'ora
op3: cancellare ordine ad un certo editore eseguita 8 volte al giorno
Indicare se la ridondanza è conveniente dati i volumi e le operazioni descritte
Tavola dei
Lettura CostoOp = (frequenza operazione) * peso operazione (interattiva o batch) * (α * numero di accessi in scrittura + numero accessi in lettura) α è il costo della scrittura che costa 2. Il peso dell'operazione invece ha valore 1 sempre di solito Costo Op2 senza Rid = 1 * 1 * (2 * 1 + 2) = 1 * 1 * 4 = 4 OP 3 – cancellare ordine ad un certo editore, eseguita 1 volta al giorno Tavola Accessi Accedo alla tabella Ordine in scrittura una volta per cancellare un ordine Ordine -> 1 accesso in Scrittura Costo Op3 senza Rid = 1 * 1 * (2 * 1 + 0) = 1 * 1 * 2 = 2 OP 4 – modificare ordine ad un certo editore, eseguita 10 volte al giorno Tavola Accessi Accedo alla tabella Ordine in lettura una volta per leggere l'ordine, poi accedo a Ordine in scrittura una volta per modificare l'ordine Ordine -> 1 accesso in Lettura Ordine -> 1 accesso in Scrittura Costo Op4 senza Rid = 10 * 1 * (2 * 1 + 1) = 10 * 1 * 3 = 30 OP 5 – visualizzare tutti gli ordini di un certo editore, eseguita 5 volte al giorno Tavola Accessi Accedo alla tabella Ordine in lettura 5 volte per leggere gli ordini Ordine -> 5 accessi in Lettura Costo Op5 senza Rid = 5 * 1 * (2 * 0 + 5) = 5 * 1 * 5 = 25scritturaCostoOp = (frequenza operazione) * peso operazione (interattiva o batch) * (α * numero di accessi in scrittura + numero accessi in lettura)
Costo Op2 senza Rid = 24 * 1 * (2 * 1 + 1) = 24 * 3 = 72
OP 3 –cancellare ordine ad un certo editore eseguita 8 volte al giorno
Tavola Accessi
Accedo alla tabella Editore in lettura una volta per leggere il codice editore, accedo alla tabella Ordine in lettura una volta per trovare il record che voglio cancellare e in scrittura una volta per cancellare un ordine
Editore -> 1 accesso in lettura
Ordine -> 1 accesso in lettura
Ordine -> 1 accesso in scrittura
CostoOp = (frequenza operazione) * peso operazione (interattiva o batch) * (α * numero di accessi in scrittura + numero accessi in lettura)
Costo Op3 senza Rid = 8 * 1 * (2 * 1 + 2) = 8 * 4 = 32
Tot costo schema senza rid = 440 + 72 + 32 = 544
Adesso vediamo quanta memoria mi occupa lo schema senza ridondanze. Supponiamo quanti caratteri e quindi bit può contenere ogni
attributo dell'entità Libro: Cod. inventario: sarà un integer, quindi 4 bytes Tipo: sarà un varchar, lungo sui 25 o 30 caratteri, sarà 30 bytes Autore: sarà un varchar, lungo sui 50 caratteri, sarà 50 bytes Scaffale: sarà un integer, quindi 4 bytes Adesso sommo questi valori e moltiplico il risultato per il numero di record contenuti in Libro, ovvero 50000. Libro = (4+30+50+4) * 50000 = 4.400.000 bytes Supponiamo quanti caratteri e quindi bit può contenere ogni campo attributo dell'entità Editore: Codice: sarà un integer, quindi 4 bytes Paese: sarà un varchar, lungo sui 25 o 30 caratteri, sarà 30 bytes Indirizzo: sarà un varchar, lungo sui 50 caratteri, sarà 50 bytes Adesso sommo questi valori e moltiplico il risultato per il numero di record contenuti in Editore, ovvero 100. Editore = (4+30+50) * 100 = 8400 bytes Supponiamo quanti caratteri e quindi bit può contenere ogni campoL'attributo della relazione OrdineData sarà un datetime, quindi 8 bytes. Il costo sarà uno smallint (arriva max a 32000), quindi 2 bytes. Adesso sommo questi valori e moltiplico il risultato per il numero di record contenuti in Ordine, ovvero 2000. Ordine = (8+2) * 2000 = 20000 bytes La memoria totale occupata dallo schema senza ridondanze è quindi 4.400.000 + 8400 + 20000 = 4.428.400 bytes Schema CON ridondanza OP 1 – costo globale degli ordini per un certo editore, eseguita 40 volte al giorno Editore -> 1 accesso in Lettura Costo Op1 CON Rid = 40 * 1 * (2 * 0 + 1) = 40 *1 * 1 = 40 OP 2 – inserire ordine ad un certo editore, eseguita 1 volta l’ora Tavola Accessi Accedo alla tabella Editore in lettura una volta per leggere il codice editore e il costo complessivo, poi accedo a Ordine in scrittura una volta per inserire un ordine e in Editore una volta in scrittura per aggiornare il costo complessivo. Editore -> 1 accesso in Lettura Editore -> 1 accesso inScritturaOrdine -> 1 accesso in ScritturaCosto Op2 CON Rid = 24 * 1 * (2 * 2 + 1) = 24 * 5 = 120OP 3 – cancellare ordine ad un certo editore eseguita 8 volte al giorno
Tavola Accessi
Accedo alla tabella Editore in lettura una volta per leggere il codice editore e il costo complessivo, accedo alla tabella Ordine in lettura una volta per trovare il record che voglio cancellare e in scrittura una volta per cancellare un ordine. Infine accedo una volta in scrittura in Editore per modificare il costo complessivo.
Editore -> 1 accesso in lettura
Editore -> 1 accesso in scrittura
Ordine -> 1 accesso in lettura
Ordine -> 1 accesso in scrittura
Costo Op3 CON Rid = 8 * 1 * (2 * 2 + 2) = 8 * 6 = 48
Tot costo schema CON rid = 40 + 120 + 48 = 208
Adesso vediamo quanta memoria mi occupa lo schema CON ridondanze.
Supponiamo quanti caratteri e quindi bit può contenere ogni campo attributo dell'entità Libro.
Non avendo attributi in più rispetto all'altro schema,
ovvero 1000. Editore = (4+30+50+2) * 1000 = 86.000 bytes Quindi, la dimensione totale occupata dai record di Libro e Editore sarà: Dimensione totale = Libro + Editore = 4.400.000 + 86.000 = 4.486.000 bytesconviene solo dello 0,1% in termini di memoria occupata. Quindi, considerando sia i costi delle operazioni che la memoria occupata, lo schema senza ridondanze risulta essere più conveniente.Il testo formattato con i tag HTML è il seguente:Costa lo 0,1% in meno rispetto a quello con, in termini di memoria. Concludiamo che lo schema CON ridondanza è il più conveniente, perché in termini di memoria rimane pressoché uguale, mentre in termini di operazioni fa risparmiare molto.
Si consideri lo schema:
- Volo(data partenza, data arrivo, codiceaeroportopar, codiceaeroportoarr, codcomandante, orevolo)
- Piloti(codpilota, nome, età, nazione)
- Nazioni(codiceaereoporto, nazione)
Sapendo che le ore di volo dipendono unicamente dagli aereoporti di partenza e di arrivo, evidenziare le dipendenze funzionali presenti nello schema e trasformarlo in terza forma normale.
Si hanno le seguenti dipendenze funzionali:
- codice viaggio -> autista
- autista -> nome_autista
Dire se la relazione è in terza forma normale ed eventualmente decomporla in modo da soddisfarla.
ESERCIZIO DIPENDENZE questo es prendilo così, un po' con le pinze, non mi torna granché.
perché il prof dà questi tre attributi codice viaggio, autista e nome_autista che nelle tabelle fornite non ci sono. Possiamo solo intuire che nomeautista sia il nome del pilota e autista sia il codicepilota, ma codiceviaggio, che potrebbe essere codicevolo, non esiste da nessuna parte. Per cui l'ho inserito io. Anche le tabelle nuove che escono alla fine non mi convincono molto.
Sapendo che le ore di volo dipendono unicamente dagli aeroporti di partenza e di arrivo, per cui:
Codiceaeroportopar, codiceaeroportoarr -> orevolo
Codicevolo -> codpilota (corrisponde a codice viaggio -> autista)
Mentre la dip funz autista -> nomeautista la troviamo già nella tab Piloti, per cui non la ripetiamo.
Tab Volo
Datapartenza, codiceaeroportopar, codcomandante -> dataarrivo, codiceaeroportoarr, orevolo
Tab Piloti
Codpilota -> nome, età, nazione
Tab Nazioni
Codiceaeroporto -> nazione
STEP 1A - semplifico parte dx
Codiceaeroportopar, codiceaeroportoarr
- orevoloCodicevolo -> codpilotaTab VoloDatapartenza, codiceaeroportopar, codcomandante -> dataarrivoDatapartenza, codiceaeroportopar, codcomandante -> CodiceaeroportoarrDatapartenza, codiceaeroportopar, codcomandante -> orevoloTab PilotiCodpilota -> nomeCodpilota -> etàCodpilota -> nazioneTab NazioniCodiceaeroporto -> nazione
- Step 1B – semplifico parte sx (ok resta uguale a prima)
- STEP 1C – resta uguale
- Step 2F1= { Codiceaeroportopar, codiceaeroportoarr -> orevolo }
- Step 2F2 = { Codicevolo -> codpilota}
- Step 2F3 = { Datapartenza, codiceaeroportopar, codcomandante -> dataarrivo,Datapartenza, codiceaeroportopar, codcomandante -> Codiceaeroportoarr,Datapartenza, codiceaeroportopar, codcomandante -> orevolo }
- Step 2F4 = { Codpilota -> nome, Codpilota -> età, Codpilota -> nazione}
- Tab NazioniCodiceaeroporto -> nazione