Schema relazionale
Supponendo di avere questo schema concettuale:

devo progettare lo schema relazionale della base di dati, indicando esplicitamente per ogni relazione dello schema relazionale, le chiavi primarie, gli attributi che possono contenere valori nulli e i vincoli di integrità referenziale.
SPETTACOLO(Nome,Descrizione,Tipologia,Inizio-R,Fine-R)
INCASSO_MENSILE(Mese,Anno,Nome-Spettacolo,Importo)
ATTORI(Nome,Nome-Spettacolo)
REPLICA(Data,Ora-I,Nome-Spettacolo,Durata,Nome-Teatro)
TEATRO(Nome,Comune,Indirizzo)
SETTORI(N-Progressivo,Nome-Teatro,Nome,Capienza,Tipo)
UTILIZZO(N-Settore,Nome-Teatro,Data-Replica,Ora-I-Replica,Nome-Spettacolo)
BIGLIETTO(Codice,N-Settore,Nome-Teatro,Data-Replica,Ora-I-Replica,Nome-Spettacolo,Data-E,Prezzo,N-Posto*)
Vincoli di integrità referenziale:
1) INCASSO-MENSILE.Nome-Spettacolo -> SPETTACOLO
2) ATTORI.Nome-Spettacolo -> SPETTACOLO
3) REPLICA.Nome-Spettacolo -> SPETTACOLO
4) REPLICA.Nome-Teatro -> TEATRO
5) SETTORI.Nome-Teatro -> TEATRO
6) UTILIZZO.N-Settore -> SETTORI
7) UTILIZZO.Nome-Teatro -> TEATRO
8) UTILIZZO.Data-Replica -> REPLICA
9) UTILIZZO.Ora-I-Replica -> REPLICA
10) UTILIZZO.Nome-Spettacolo -> SPETTACOLO
11) BIGLIETTO.N-Settore -> SETTORI
12) BIGLIETTO.Nome-Teatro -> TEATRO
13) BIGLIETTO.Data-Replica -> REPLICA
14) BIGLIETTO.Ora-I-Replica -> REPLICA
15) BIGLIETTO.Nome-Spettacolo -> SPETTACOLO
I miei dubbi sono sulle relazioni UTILIZZO e BIGLIETTO, sono corretti gli attrubuti, le chiavi ed i vincoli? Ad esempio, in UTILIZZO mi tengo la chiave di SETTORI ovvero N-Progressivo (N-Settore), ma settori è un'entità debole, devo quindi tirarmi dietro anche la chiave Nome-Teatro come ho fatto o è sbagliato? Il resto è corretto?
Dopo aver stabilito che questo schema è corretto posterò query in algebra relazionale su questo esercizio.
Grazie!

devo progettare lo schema relazionale della base di dati, indicando esplicitamente per ogni relazione dello schema relazionale, le chiavi primarie, gli attributi che possono contenere valori nulli e i vincoli di integrità referenziale.
SPETTACOLO(Nome,Descrizione,Tipologia,Inizio-R,Fine-R)
INCASSO_MENSILE(Mese,Anno,Nome-Spettacolo,Importo)
ATTORI(Nome,Nome-Spettacolo)
REPLICA(Data,Ora-I,Nome-Spettacolo,Durata,Nome-Teatro)
TEATRO(Nome,Comune,Indirizzo)
SETTORI(N-Progressivo,Nome-Teatro,Nome,Capienza,Tipo)
UTILIZZO(N-Settore,Nome-Teatro,Data-Replica,Ora-I-Replica,Nome-Spettacolo)
BIGLIETTO(Codice,N-Settore,Nome-Teatro,Data-Replica,Ora-I-Replica,Nome-Spettacolo,Data-E,Prezzo,N-Posto*)
Vincoli di integrità referenziale:
1) INCASSO-MENSILE.Nome-Spettacolo -> SPETTACOLO
2) ATTORI.Nome-Spettacolo -> SPETTACOLO
3) REPLICA.Nome-Spettacolo -> SPETTACOLO
4) REPLICA.Nome-Teatro -> TEATRO
5) SETTORI.Nome-Teatro -> TEATRO
6) UTILIZZO.N-Settore -> SETTORI
7) UTILIZZO.Nome-Teatro -> TEATRO
8) UTILIZZO.Data-Replica -> REPLICA
9) UTILIZZO.Ora-I-Replica -> REPLICA
10) UTILIZZO.Nome-Spettacolo -> SPETTACOLO
11) BIGLIETTO.N-Settore -> SETTORI
12) BIGLIETTO.Nome-Teatro -> TEATRO
13) BIGLIETTO.Data-Replica -> REPLICA
14) BIGLIETTO.Ora-I-Replica -> REPLICA
15) BIGLIETTO.Nome-Spettacolo -> SPETTACOLO
I miei dubbi sono sulle relazioni UTILIZZO e BIGLIETTO, sono corretti gli attrubuti, le chiavi ed i vincoli? Ad esempio, in UTILIZZO mi tengo la chiave di SETTORI ovvero N-Progressivo (N-Settore), ma settori è un'entità debole, devo quindi tirarmi dietro anche la chiave Nome-Teatro come ho fatto o è sbagliato? Il resto è corretto?
Dopo aver stabilito che questo schema è corretto posterò query in algebra relazionale su questo esercizio.
Grazie!
Risposte
"enigmagame":
I miei dubbi sono sulle relazioni UTILIZZO e BIGLIETTO, sono corretti gli attrubuti, le chiavi ed i vincoli? Ad esempio, in UTILIZZO mi tengo la chiave di SETTORI ovvero N-Progressivo (N-Settore), ma settori è un'entità debole, devo quindi tirarmi dietro anche la chiave Nome-Teatro come ho fatto o è sbagliato? Il resto è corretto?
in effetti in :
UTILIZZO(N-Settore,Nome-Teatro,Data-Replica,Ora-I-Replica,Nome-Spettacolo)
il Nome-Teatro sembrerebbe poter essere tolto, in quanto lo dovresti poter ricavare dalla tabella Replica.
per il resto ci sentiamo tra un po' ......quando ho un po' di tempo lo guardo
"codino75":
il Nome-Teatro sembrerebbe poter essere tolto, in quanto lo dovresti poter ricavare dalla tabella Replica.
Allora anche Nome-Spettacolo potrebbe essere omesso? E anche in qualche altra relazione ci sono attributi da togliere...
Non so, non capisco cosa fare in questi casi, alla fine su questi schemi ci devo fare delle query in algebra relazionale, ma se non sono corretti rischio di fare un macello

la mia osservazione riguardava solo il fatto che, poiche' ad ogni replica e' associato uno ed un solo teatro (presente nella tabella REPLICA, allora nella tabella UTILIZZO potrei anche non metterlo, restando il fatto che esso FA PARTE DELLA CHIAVE DI SETTORE, quindi FORMALMENTE andrebbe messo.
forse e' meglio lasciare come hai fatto tu.
forse e' meglio lasciare come hai fatto tu.
Ok, allora supponendo di tenere lo schema cosi com'è mi viene chiesto di esprimere in algebra relazionale ottimizzata le seguenti interrogazioni.
1) Trovare il nome, il comune e l'indirizzo dei teatri dove si sono tenute almeno due repliche di spettacoli di prosa nel periodo 1/1/2007 - 10/1/2007.
2) Trovare i teatri che non hanno mai ospitato una replica di uno spettacolo di tipo 'cocerto rock/pop', riportando il nome del teatro e il suo indirizzo.
3) Trovare i biglietti emessi dal 10/3/2007 a oggi per repliche di spettacoli di tipo 'concerto classico' che si terranno da oggi in poi, riportando il codice del biglietto emesso, la data di emissione, lo spettacolo e la data della replica a cui si riferisce il prezzo.
Qui iniziano un pò i problemi, comunque vediamo ad esempio la prima interrogazione dove io procederei cosi:
- Seleziono gli spettacoli dove tipologia = prosa, dove inizio_r = 1/1/2007 e fine_r = 10/1/2007
- Eseguo un theta-join tra spettacolo e replica
- Eseguo un theta-join tra il risultato precedente ed una versione ridenominata di replica, e qui selezione le repliche con lo stesso nome ma data diversa (per trovare gli spettacoli con almeno due repliche)
- Eseguo un theta-join del precedente con teatro e poi partiziono per avere nome, comune ed indirizzo
Ora non so se la strada è giusta o completamente sbagliata, ma mi trovo in difficoltà a scriverla, e poi per rendrela ottimizzata che dovrei fare?
Grazie!
1) Trovare il nome, il comune e l'indirizzo dei teatri dove si sono tenute almeno due repliche di spettacoli di prosa nel periodo 1/1/2007 - 10/1/2007.
2) Trovare i teatri che non hanno mai ospitato una replica di uno spettacolo di tipo 'cocerto rock/pop', riportando il nome del teatro e il suo indirizzo.
3) Trovare i biglietti emessi dal 10/3/2007 a oggi per repliche di spettacoli di tipo 'concerto classico' che si terranno da oggi in poi, riportando il codice del biglietto emesso, la data di emissione, lo spettacolo e la data della replica a cui si riferisce il prezzo.
Qui iniziano un pò i problemi, comunque vediamo ad esempio la prima interrogazione dove io procederei cosi:
- Seleziono gli spettacoli dove tipologia = prosa, dove inizio_r = 1/1/2007 e fine_r = 10/1/2007
- Eseguo un theta-join tra spettacolo e replica
- Eseguo un theta-join tra il risultato precedente ed una versione ridenominata di replica, e qui selezione le repliche con lo stesso nome ma data diversa (per trovare gli spettacoli con almeno due repliche)
- Eseguo un theta-join del precedente con teatro e poi partiziono per avere nome, comune ed indirizzo
Ora non so se la strada è giusta o completamente sbagliata, ma mi trovo in difficoltà a scriverla, e poi per rendrela ottimizzata che dovrei fare?
Grazie!
forse devi buttare nella mischia la parola COUNT?
"codino75":
forse devi buttare nella mischia la parola COUNT?
In algebra relazionale

c) Trovare per ogni piano e con riferimento al giorno 1/1/2002: il numero di stanze singole occupate, il numero di stanze doppie occupate e il numero di stanze triple occupate.
Codice:
CREATE VIEW Stanze_1_1_2002(Piano, Numero, Tipo, Bagno) AS
SELECT s.Piano, s.Numero, s.Tipo, s.Bagno
FROM Stanza s JOIN Occupazione o ON (s.Piano = o.Piano AND s.Numero = o.Stanza)
WHERE o.Data = '1/1/2002'
SELECT Piano, Tipo, COUNT(TIPO)
FROM Stanze_1_1_2002
GROUP BY Piano, Tipo
questo sopra non l'avevi fatto tu?
Codice:
CREATE VIEW Stanze_1_1_2002(Piano, Numero, Tipo, Bagno) AS
SELECT s.Piano, s.Numero, s.Tipo, s.Bagno
FROM Stanza s JOIN Occupazione o ON (s.Piano = o.Piano AND s.Numero = o.Stanza)
WHERE o.Data = '1/1/2002'
SELECT Piano, Tipo, COUNT(TIPO)
FROM Stanze_1_1_2002
GROUP BY Piano, Tipo
questo sopra non l'avevi fatto tu?
Si, ma però la parlavamo di interrogazioni da eseguire in SQL.
Qui parlo di interrogazioni da eseguire in algebra relazionale ottimizzata, usando operatori come $pi$, $sigma$, $rho$ join ecc...
Qui parlo di interrogazioni da eseguire in algebra relazionale ottimizzata, usando operatori come $pi$, $sigma$, $rho$ join ecc...
"enigmagame":
Si, ma però la parlavamo di interrogazioni da eseguire in SQL.
Qui parlo di interrogazioni da eseguire in algebra relazionale ottimizzata, usando operatori come $pi$, $sigma$, $rho$ join ecc...
ok scusa non avevo sinceramente mai pensato a questa distinzione...
cmq, la tua idea sembra corretta, pero' mi pare che la data puoi ricavarla direttamente dalla tabella REPLICA;
inoltre per discriminare 2 repliche dello stesso spettacolo devi andare anche a vedere l'orario.
inoltre per discriminare 2 repliche dello stesso spettacolo devi andare anche a vedere l'orario.
"codino75":
cmq, la tua idea sembra corretta, pero' mi pare che la data puoi ricavarla direttamente dalla tabella REPLICA;
inoltre per discriminare 2 repliche dello stesso spettacolo devi andare anche a vedere l'orario.
Vero, si può ricavare da REPLICA...
Ora devo scappare, domani provo a postare una 'possibile' soluzione di questi esercizi, cosi vediamo che macello

Intanto grazie!
Ciao!
Rieccomi...
Provo a postare una soluzione della prima interrogazione, ottimizzata, per ora la scrivo in forma testuale, se poi ho un attimo di tempo posto il diagramma ad albero, molto più chiaro...
1) Sulla relazione SPETTACOLO eseguo una proiezione sugli attributi Nome,Tipologia successivamente eseguo una selezione impostando che Tipologia = 'Prosa'
2) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, N-Spettacolo, N-Teatro successivamente eseguo una selezione impostando che Data > 1/1/2007 E Data < 10/1/2007
3) Eseguo un JOIN tra la 1 e la 2 impostando Nome = N-Spettacolo
4) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, N-Spettacolo, N-Teatro successivamente eseguo una ridenominazione impostando (D,NS,NT <- Data,Nome-Spettacolo,N-Teatro)
5) Eseguo una JOIN tra la 3 e la 4 impostando D <> Data E NS = N-Spettacolo
6) Sulla 5 eseguo una proiezione sugli attributi NT
7) Eseguo una JOIN tra TEATRO e la 6 impostando Nome = NT
8) Eseguo una proiezione sulla 7 sugli attributi Nome,Comune,Indirizzo
Spero sia +o- chiaro, ripeto, più tardi cerco di postare il diagramma...
Grazie!
Provo a postare una soluzione della prima interrogazione, ottimizzata, per ora la scrivo in forma testuale, se poi ho un attimo di tempo posto il diagramma ad albero, molto più chiaro...
1) Sulla relazione SPETTACOLO eseguo una proiezione sugli attributi Nome,Tipologia successivamente eseguo una selezione impostando che Tipologia = 'Prosa'
2) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, N-Spettacolo, N-Teatro successivamente eseguo una selezione impostando che Data > 1/1/2007 E Data < 10/1/2007
3) Eseguo un JOIN tra la 1 e la 2 impostando Nome = N-Spettacolo
4) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, N-Spettacolo, N-Teatro successivamente eseguo una ridenominazione impostando (D,NS,NT <- Data,Nome-Spettacolo,N-Teatro)
5) Eseguo una JOIN tra la 3 e la 4 impostando D <> Data E NS = N-Spettacolo
6) Sulla 5 eseguo una proiezione sugli attributi NT
7) Eseguo una JOIN tra TEATRO e la 6 impostando Nome = NT
8) Eseguo una proiezione sulla 7 sugli attributi Nome,Comune,Indirizzo
Spero sia +o- chiaro, ripeto, più tardi cerco di postare il diagramma...
Grazie!
"enigmagame":
Rieccomi...
Provo a postare una soluzione della prima interrogazione, ottimizzata, per ora la scrivo in forma testuale, se poi ho un attimo di tempo posto il diagramma ad albero, molto più chiaro...
1) Sulla relazione SPETTACOLO eseguo una proiezione sugli attributi Nome,Tipologia successivamente eseguo una selezione impostando che Tipologia = 'Prosa'
2) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, N-Spettacolo, N-Teatro successivamente eseguo una selezione impostando che Data > 1/1/2007 E Data < 10/1/2007
3) Eseguo un JOIN tra la 1 e la 2 impostando Nome = N-Spettacolo
4) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, N-Spettacolo, N-Teatro successivamente eseguo una ridenominazione impostando (D,NS,NT <- Data,Nome-Spettacolo,N-Teatro)
5) Eseguo una JOIN tra la 3 e la 4 impostando D <> Data E NS = N-Spettacolo
6) Sulla 5 eseguo una proiezione sugli attributi NT
7) Eseguo una JOIN tra TEATRO e la 6 impostando Nome = NT
8) Eseguo una proiezione sulla 7 sugli attributi Nome,Comune,Indirizzo
Spero sia +o- chiaro, ripeto, più tardi cerco di postare il diagramma...
Grazie!
sembra corretta ed ottimizzazta...
io ci metteri pure l'orario della replica, nel join 5), visto che si puo' fare 1 replica la mattina e una il pomeriggio....e' + schic!!!
"codino75":
sembra corretta ed ottimizzazta...
io ci metteri pure l'orario della replica, nel join 5), visto che si puo' fare 1 replica la mattina e una il pomeriggio....e' + schic!!!
Vero, è bene aggiungere anche questa discriminazione!
Passiamo ora a vedere la seconda interrogazione:
1) Sulla relazione SPETTACOLO eseguo una proiezione sugli attributi Nome, Tipologia successivamente eseguo una selezione impostando che Tipologia = 'concerto rock/pop'
2) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, Ora-I, Nome-Spettacolo, Nome-Teatro
3) Eseguo una JOIN tra la 1 e la 2 impostando Nome = Nome-Spettacolo
4) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, Ora-I, Nome-Spettacolo, successivamente eseguo una ridenominazione impostando (D,O,NS <- Data, Ora-I, Nome-Spettacolo)
5) Eseguo una JOIN tra la 3 e la 4 impostando N = Nome-Spettacolo E D <> Data E O <> Ora-I
6) Sulla 5 eseguo una proiezione sugli attributi Nome-Teratro
7) Sulla relazione TEATRO eseguo una proiezione sugli attributi Nome, Indirizzo
8) Eseguo una sottrazione tra la 7 e la 6
Da notare al punto 4, nella fase di proiezione non ho considerato e quindi poi ridenominato Nome-Tetaro, mi pare sia inutule portarselo dietro da li, c'è già nella 2, e quando andrò ad eseguire la JOIN per avere i teatri in cui ci sono state repliche, sicuramente avrò anche il nome del teatro...
Che dite?
Ciao!
PS: A tra poco (forse) con la terza iterrogazione

Via con la terza interrogazione allora
1) Sulla relazione SPETTACOLO eseguo una proiezione sugli attributi Nome, Tipologia seguita da una selezione impostando Tipologia = 'concerto classico'
2) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, Ora-I, Nome-Spettacolo seguita da una selezione impostando Data > Now()
3) Eseguo una JOIN tra la 1 e la 2 impostando Nome = Nome-Spettacolo
4) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, Ora-I, Nome-Spettacolo seguita da una selezione impostando Data > Now() seguita da una ridenominazione impostando (D,O,NS <- Data, Ora-I, Nome-Spettacolo)
5) Eseguo una JOIN tra la 3 e la 4 impostando N = Nome-Spettacolo E D <> Data E O <> Ora-I
6) Sulla 5 eseguo una proiezione sugli attributi Nome-Spettacolo, Data
7) Sulla relazione BIGLIETTO eseguo una proiezione sugli attributi Codice, Nome-Spettacolo, Data-E, Prezzo seguita da una selezione impostando Data-E > 10/3/2007
8) Eseguo un JOIN naturale tra la 6 e la 7 seguita da una proiezione sugli attributi Codice, Data-E, Nome-Spettacolo, Data, Replica
Da notare che al passo 4 ho eseguito una selezione sulla Data, è giusto farla anche qua o no? Nella prima interrogazione non l'avevo usata...
Seconda cosa, nella 7 non mi sono portato dietro, nella proiezione, la Data-Replica è inutile no? Salta fuori dal JOIN con la 6
Ora vediamo i mille errori che ci sono in queste ultime due interrogazioni...
Ciao!

1) Sulla relazione SPETTACOLO eseguo una proiezione sugli attributi Nome, Tipologia seguita da una selezione impostando Tipologia = 'concerto classico'
2) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, Ora-I, Nome-Spettacolo seguita da una selezione impostando Data > Now()
3) Eseguo una JOIN tra la 1 e la 2 impostando Nome = Nome-Spettacolo
4) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, Ora-I, Nome-Spettacolo seguita da una selezione impostando Data > Now() seguita da una ridenominazione impostando (D,O,NS <- Data, Ora-I, Nome-Spettacolo)
5) Eseguo una JOIN tra la 3 e la 4 impostando N = Nome-Spettacolo E D <> Data E O <> Ora-I
6) Sulla 5 eseguo una proiezione sugli attributi Nome-Spettacolo, Data
7) Sulla relazione BIGLIETTO eseguo una proiezione sugli attributi Codice, Nome-Spettacolo, Data-E, Prezzo seguita da una selezione impostando Data-E > 10/3/2007
8) Eseguo un JOIN naturale tra la 6 e la 7 seguita da una proiezione sugli attributi Codice, Data-E, Nome-Spettacolo, Data, Replica
Da notare che al passo 4 ho eseguito una selezione sulla Data, è giusto farla anche qua o no? Nella prima interrogazione non l'avevo usata...
Seconda cosa, nella 7 non mi sono portato dietro, nella proiezione, la Data-Replica è inutile no? Salta fuori dal JOIN con la 6
Ora vediamo i mille errori che ci sono in queste ultime due interrogazioni...

Ciao!
"enigmagame":
[quote="codino75"]
sembra corretta ed ottimizzazta...
io ci metteri pure l'orario della replica, nel join 5), visto che si puo' fare 1 replica la mattina e una il pomeriggio....e' + schic!!!
Vero, è bene aggiungere anche questa discriminazione!
Passiamo ora a vedere la seconda interrogazione:
1) Sulla relazione SPETTACOLO eseguo una proiezione sugli attributi Nome, Tipologia successivamente eseguo una selezione impostando che Tipologia = 'concerto rock/pop'
2) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, Ora-I, Nome-Spettacolo, Nome-Teatro
3) Eseguo una JOIN tra la 1 e la 2 impostando Nome = Nome-Spettacolo
4) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, Ora-I, Nome-Spettacolo, successivamente eseguo una ridenominazione impostando (D,O,NS <- Data, Ora-I, Nome-Spettacolo)
5) Eseguo una JOIN tra la 3 e la 4 impostando N = Nome-Spettacolo E D <> Data E O <> Ora-I
6) Sulla 5 eseguo una proiezione sugli attributi Nome-Teratro
7) Sulla relazione TEATRO eseguo una proiezione sugli attributi Nome, Indirizzo
8) Eseguo una sottrazione tra la 7 e la 6
Da notare al punto 4, nella fase di proiezione non ho considerato e quindi poi ridenominato Nome-Tetaro, mi pare sia inutule portarselo dietro da li, c'è già nella 2, e quando andrò ad eseguire la JOIN per avere i teatri in cui ci sono state repliche, sicuramente avrò anche il nome del teatro...
Che dite?
Ciao!
PS: A tra poco (forse) con la terza iterrogazione

forse sbaglio o non ho controllato abbastanza, ma la interrogazione 2) chiedeva di trovare i teatri che non hanno ospitato alcuna replica di tipo rock.
a me sembra che tu hai trovato quei teatri che non hanno ospitato 'ALMENO 2 REPLICHE di tipo rock, o qualcosa del genere.
sono io che sono un po' fuso o ti sei confuso?
"enigmagame":
Via con la terza interrogazione allora![]()
1) Sulla relazione SPETTACOLO eseguo una proiezione sugli attributi Nome, Tipologia seguita da una selezione impostando Tipologia = 'concerto classico'
2) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, Ora-I, Nome-Spettacolo seguita da una selezione impostando Data > Now()
3) Eseguo una JOIN tra la 1 e la 2 impostando Nome = Nome-Spettacolo
4) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, Ora-I, Nome-Spettacolo seguita da una selezione impostando Data > Now() seguita da una ridenominazione impostando (D,O,NS <- Data, Ora-I, Nome-Spettacolo)
5) Eseguo una JOIN tra la 3 e la 4 impostando N = Nome-Spettacolo E D <> Data E O <> Ora-I
6) Sulla 5 eseguo una proiezione sugli attributi Nome-Spettacolo, Data
7) Sulla relazione BIGLIETTO eseguo una proiezione sugli attributi Codice, Nome-Spettacolo, Data-E, Prezzo seguita da una selezione impostando Data-E > 10/3/2007
8) Eseguo un JOIN naturale tra la 6 e la 7 seguita da una proiezione sugli attributi Codice, Data-E, Nome-Spettacolo, Data, Replica
Da notare che al passo 4 ho eseguito una selezione sulla Data, è giusto farla anche qua o no? Nella prima interrogazione non l'avevo usata...
Seconda cosa, nella 7 non mi sono portato dietro, nella proiezione, la Data-Replica è inutile no? Salta fuori dal JOIN con la 6
Ora vediamo i mille errori che ci sono in queste ultime due interrogazioni...![]()
Ciao!
mi sembra che non puoi bttare via i dati riguardanti la replica (data, ora) dalla tabella biglietto (punto 7) , in quanto mi sembrava (corregimi se sbaglio) che un biglietto si riferisce ad una e ad una sola replica in particolare.
"codino75":
forse sbaglio o non ho controllato abbastanza, ma la interrogazione 2) chiedeva di trovare i teatri che non hanno ospitato alcuna replica di tipo rock.
a me sembra che tu hai trovato quei teatri che non hanno ospitato 'ALMENO 2 REPLICHE di tipo rock, o qualcosa del genere.
sono io che sono un po' fuso o ti sei confuso?
Quel che dici è vero, in effetti è confusione mia, vedo la parola replica come la riproposizione di uno spettacolo. Ma quest'ultimo passa di li anche se viene proposto una sola volta, quindi penso che la seconda interrogazione sia da interpretare come dici tu.
Detto questo la seconda interrogazione corretta dovrebbe essere questa:
1) Sulla relazione SPETTACOLO eseguo una proiezione sugli attributi Nome, Tipologia successivamente eseguo una selezione impostando che Tipologia = 'concerto rock/pop'
2) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, Ora-I, Nome-Spettacolo, Nome-Teatro
3) Eseguo una JOIN tra la 1 e la 2 impostando Nome = Nome-Spettacolo
4) Sulla 3 eseguo una proiezione sugli attributi Nome-Teratro
5) Sulla relazione TEATRO eseguo una proiezione sugli attributi Nome, Indirizzo
6) Eseguo una sottrazione tra la 5 e la 4
Che dici?
"codino75":
mi sembra che non puoi bttare via i dati riguardanti la replica (data, ora) dalla tabella biglietto (punto 7) , in quanto mi sembrava (corregimi se sbaglio) che un biglietto si riferisce ad una e ad una sola replica in particolare.
Anche qui confusione mia, infatti anche dal testo: "Infine si memorizzano i biglietti che vengono venduti per singola replica..."
In questo casa l'interrogazione corretta dovrebbe essere questa:
1) Sulla relazione SPETTACOLO eseguo una proiezione sugli attributi Nome, Tipologia seguita da una selezione impostando Tipologia = 'concerto classico'
2) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, Ora-I, Nome-Spettacolo seguita da una selezione impostando Data > Now()
3) Eseguo una JOIN tra la 1 e la 2 impostando Nome = Nome-Spettacolo
4) Sulla relazione REPLICA eseguo una proiezione sugli attributi Data, Ora-I, Nome-Spettacolo seguita da una selezione impostando Data > Now() seguita da una ridenominazione impostando (D,O,NS <- Data, Ora-I, Nome-Spettacolo)
5) Eseguo una JOIN tra la 3 e la 4 impostando N = Nome-Spettacolo E D <> Data E O <> Ora-I
6) Sulla 5 eseguo una proiezione sugli attributi Nome-Spettacolo, Data, Ora-I
7) Sulla relazione BIGLIETTO eseguo una proiezione sugli attributi Codice, Data-Replica, Ora-I-Replica, Nome-Spettacolo, Data-E, Prezzo seguita da una selezione impostando Data-E > 10/3/2007
8) Eseguo un JOIN naturale tra la 6 e la 7 seguita da una proiezione sugli attributi Codice, Data-E, Nome-Spettacolo, Data, Replica
Giusto?
Grazie!
sembrano concettualmente entrambe corrette, solo che nella 3) devi aver dimenticato, nel ricopiarla, di eliminare la questione delle 2 repliche di cui si diceva prima.
p.s.:non ho controllato bene se sono ottimizzate.
p.s.:non ho controllato bene se sono ottimizzate.
"codino75":
sembrano concettualmente entrambe corrette, solo che nella 3) devi aver dimenticato, nel ricopiarla, di eliminare la questione delle 2 repliche di cui si diceva prima.
p.s.:non ho controllato bene se sono ottimizzate.
Sisi, ho corretto la seconda interrogazione ma non la terza, bisogna togliere quel JOIN in più che mi trova gli spettacoli con almeno due repliche!
Grazie mille

PS: Stò per aprire un ultimo post, su di un esercizio completo da schema er in poi per alcuni dubbi, ma ho quasi finito di rompere le scatole...!