edutecnica



Esercizio no.5:soluzione

Si identificano delle entità fondamentali come la Città (C) e i teatri (T).
Ovviamente in ogni città ci possono essere più teatri, mentre un teatro può stare in una sola città.
Si individua l'entità Spettacoli (S); si potrebbe pensare di associare Spettacoli - Città con una relazione n-n



L'associazione n-n si traduce nella relazione Evento (E) che oltre alle chiavi esterne di C ed S conterrà il campo data dell'evento.
Questa soluzione mette in evidenza, però, come individuato un evento in una certa data in una certa città sia impossibile risalire alla sala teatrale T nel quale tale evento viene messo in atto.



L'inversione della posizione fra le entità T e C risolve questa incongruenza, è ora possibile tentare di impostare la versione completa del db introducendo un numero minimo di attributi al fine di testare il tutto.


C
idc contatore chiave primaria
nome testo nome della città
CREATE TABLE C (
idc COUNTER PRIMARY KEY,
nome CHAR(20));

S
ids contatore chiave primaria
tit testo titolo spettacolo
pre numerico prezzo del biglietto
CREATE TABLE S (
ids COUNTER PRIMARY KEY,
tit CHAR(20),
pre INTEGER);

T
idt contatore chiave primaria
nomt testo nome del teatro
xidc numerico intero chiave esterna
CREATE TABLE T (
idt COUNTER PRIMARY KEY,
nomt CHAR(20),
xidc INTEGER REFERENCES (idc));

E
ide contatore chiave primaria
data data/ora data in cifre
xidt numerico intero (chiave esterna)
xids numerico intero (chiave esterna)
CREATE TABLE E (ide COUNTER PRIMARY KEY, data date, xids INTEGER REFERENCES S(ids), xidt INTEGER REFERENCES T(idt));

Popoliamo le tabelle con valori di test.

tabella C (città)

tabella T (teatro)

idc nome
1 rho
2 legnano
idt nomt xidc
1 capitol 1
2 roxy 1
3 centrale 2
4 ariston 2

tabella S (spettacolo)

tabella E (evento)

ids tit pre
1 alpha 8
2 beta 8
3 gamma 8
4 delta 8
5 tau 12
6 omega 15
7 lambda 10
8 phi 14
ide xidt xids data
1 1 2 01/01/2001
2 1 8 21/01/2001
3 2 1 07/01/2001
4 2 5 14/01/2001
5 3 3 02/01/2001
6 3 5 30/01/2001
7 4 4 10/01/2001
8 4 6 20/01/2001

 

q1: Elencare tutti gli eventi per data, per città, e per teatro che si svolgono fin un intervallo fra due date (per noi tra il 10/01/2001 e 20/01/2001 inclusi).

   
SELECT C.nome, T.nomt, E.data, S.tit FROM C,T,E,S
WHERE C.idc=T.xidc AND
T.idt=E.xidt AND S.
ids=E.xids AND
E.data>=#01/10/2001# AND E.data<=#01/20/2001#;
nome nomt data
tit
rho roxy 14/01/2001
tau
legnano ariston 10/01/2001
delta
legnano ariston 20/01/2001
omega

q2: Contare quanti eventi si svolgono in una specifica città ( per noi Rho )

   
SELECT COUNT(*) AS TOT
FROM C, T, E
WHERE C.idc=T.xidc AND
T.idt=E.xidt AND
C.nome='rho';
TOT
4

q3: Eseguire la somma del costo dei biglietti per una singola persona per tutti gli spettacoli che vengono svolti in uno specifico teatro (per noi nel cinema Ariston di Legnano).

   
SELECT SUM(S.pre) AS TOT
FROM S, T, E
WHERE T.idt=E.xidt AND
S.ids=E.xids AND
T.nomt='ariston';
TOT
23

q4: Dire in quali sale viene eseguito lo spettacolo maggiormente rappresentato e quando.

   
SELECT T.nomt, E.data
FROM T, E
WHERE T.idt=E.xidt AND
E.xids= (
    SELECT TOP 1 E.xids
    FROM E GROUP BY E.xids
    ORDER BY COUNT(*) DESC
);
nomt data
roxy 14/01/2001
centrale 30/01/2001

 

 

 

 


 








edutecnica