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.
|
CREATE TABLE C ( idc COUNTER PRIMARY KEY, nome CHAR(20)); |
|
CREATE TABLE S ( ids COUNTER PRIMARY KEY, tit CHAR(20), pre INTEGER); |
|
CREATE TABLE T ( idt COUNTER PRIMARY KEY, nomt CHAR(20), xidc INTEGER REFERENCES (idc)); |
|
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) |
|||||||||||||||||||||
|
|
tabella S (spettacolo) |
tabella E (evento) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
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#; |
|
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'; |
|
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'; |
|
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 ); |
|