Basi di dati
Data la seguente base di dati:
TAXI(Targa, MatricolaCond, AnnoImmatric, Sigla, Modello, Marca, No_Posti) Targa=chiave primaria
CONDUCENTE(MatricolaCond, NomeConducente,Telefono) MatricolaCond=chiave primaria
TURNO(Matricola, Data, OraInizio, OraFine) Maticola,data=chiavi primarie
CORSA(Targa, Data, Ora, LuogoPartenza, LuogoArrivo, Costo) Targa,data,ora=chiavi primarie
Esprimere in algebra relazionale le seguenti query:
1.Estrarre Targa, Modello e Numero di Posti dei taxi in dotazione.
2.Estrarre il Nome dei Conducenti che fanno uso di un taxi immatricolato nel 2003.
3.Estrarre il Nome dei Conducenti, e la targa del taxi utilizzato, che hanno avuto un turno giorno 25/12/2004.
4.Estrarre i nomi dei tassisti che hanno fatto almeno due turni con ora inizio 10:00.
5.Estrarre i nomi dei tassisti che hanno fatto almeno due turni con ora inizio 8:00 ma non hanno mai fatto un turno dopo il 24 Dic 2004.
6.Estrarre la sigla dei taxi scorretti, cioè quelli che hanno accompagnato un cliente in un ora e un giorno in cui non erano di turno.
TAXI(Targa, MatricolaCond, AnnoImmatric, Sigla, Modello, Marca, No_Posti) Targa=chiave primaria
CONDUCENTE(MatricolaCond, NomeConducente,Telefono) MatricolaCond=chiave primaria
TURNO(Matricola, Data, OraInizio, OraFine) Maticola,data=chiavi primarie
CORSA(Targa, Data, Ora, LuogoPartenza, LuogoArrivo, Costo) Targa,data,ora=chiavi primarie
Esprimere in algebra relazionale le seguenti query:
1.Estrarre Targa, Modello e Numero di Posti dei taxi in dotazione.
2.Estrarre il Nome dei Conducenti che fanno uso di un taxi immatricolato nel 2003.
3.Estrarre il Nome dei Conducenti, e la targa del taxi utilizzato, che hanno avuto un turno giorno 25/12/2004.
4.Estrarre i nomi dei tassisti che hanno fatto almeno due turni con ora inizio 10:00.
5.Estrarre i nomi dei tassisti che hanno fatto almeno due turni con ora inizio 8:00 ma non hanno mai fatto un turno dopo il 24 Dic 2004.
6.Estrarre la sigla dei taxi scorretti, cioè quelli che hanno accompagnato un cliente in un ora e un giorno in cui non erano di turno.
Risposte
Scusa, ma vedo molti tuoi post qui in sezione informatica. Passi dalla programmazione C ad algoritmi di ricerca. Dall'algebra booleana all'algebra relazionale per i database e poi non sai comprimere/decomprimere un file.
Se è lecito posso chiederti cosa studi?


Se è lecito posso chiederti cosa studi?

Data la seguente base di dati:
TAXI(Targa, MatricolaCond, AnnoImmatric, Sigla, Modello, Marca, No_Posti) Targa=chiave primaria
CONDUCENTE(MatricolaCond, NomeConducente,Telefono) MatricolaCond=chiave primaria
TURNO(Matricola, Data, OraInizio, OraFine) Matricola,data=chiavi primarie
CORSA(Targa, Data, Ora, LuogoPartenza, LuogoArrivo, Costo) Targa,data,ora=chiavi primarie
Esprimere in algebra relazionale le seguenti query:
1.Estrarre Targa, Modello e Numero di Posti dei taxi in dotazione.
2.Estrarre il Nome dei Conducenti che fanno uso di un taxi immatricolato nel 2003.
3.Estrarre il Nome dei Conducenti, e la targa del taxi utilizzato, che hanno avuto un turno giorno 25/12/2004.
4.Estrarre i nomi dei tassisti che hanno fatto almeno due turni con ora inizio 10:00.
5.Estrarre i nomi dei tassisti che hanno fatto almeno due turni con ora inizio 8:00 ma non hanno mai fatto un
turno dopo il 24 Dic 2004.
6.Estrarre la sigla dei taxi scorretti, cioè quelli che hanno accompagnato un cliente in un'ora e un giorno in cui non
erano di turno.
Provo con uno "pseudo-SQL", frazionando le query in operazioni per quanto possibile elementari, facendo uso di tabelle
temporanee, così che vengano fuori query di più semplice scrittura (per me!:-D) e comprensione

Ovviamente:
Select rappresenta l'operatore di selezione di tuple da una relazione, combinato con una proiezione sui campi specificati;
Join rappresenta l'operatore di congiunzione (equijoin) di due relazioni;
Project rappresenta l'operatore di proiezione, di tipo DISTINCT, su uno o più attributi di una relazione;
giving indica che il risultato non è visualizzato, ma posto in una tabella ausiliaria;
MINUS è l'operatore di differenza tra due relazioni,
[/list:u:fz0x2606]
limitatamente alle notazioni formalmente differenti rispetto ad un reale SQL.
1.Estrarre Targa, Modello e Numero di Posti dei taxi in dotazione. a. Project Targa,Modello,No_Posti from TAXI 2.Estrarre il Nome dei Conducenti che fanno uso di un taxi immatricolato nel 2003. a. Select MatricolaCond from TAXI where AnnoImmatric=2003 giving R1 b. Join R1,CONDUCENTE on R1.MatricolaCond=CONDUCENTE.MatricolaCond giving R2 c. Project NomeConducente from R2 3.Estrarre il Nome dei Conducenti, e la targa del taxi utilizzato, che hanno avuto un turno giorno 25/12/2004. a. Select Matricola from TURNO where Data="25/12/2004" giving R1 b. Join R1,CONDUCENTE on R1.Matricola=CONDUCENTE.MatricolaCond giving R2 c. Join R2,TAXI on R2.Matricola=TAXI.MatricolaCond giving R3 d. Project NomeConducente,Targa from R3 4.Estrarre i nomi dei tassisti che hanno fatto almeno due turni con ora inizio 10:00. a. Select Matricola,Data from TURNO where OraInizio="10:00" giving R1 b. Select Matricola from R1 group by Matricola having Count(*)>=2 giving R2 c. Join R2,CONDUCENTE on Matricola=MatricolaCond giving R3 d. Project NomeConducente from R3 5.Estrarre i nomi dei tassisti che hanno fatto almeno due turni con ora inizio 8:00 ma non hanno mai fatto un turno dopo il 24 Dic 2004. a. Select Matricola,Data from TURNO where OraInizio="8:00" giving R1 b. Select Matricola from R1 group by Matricola having Count(*)>=2 giving R2 c. Select Matricola from TURNO where Data>="24/12/2004" giving R3 d. R2 Minus R3 giving R4 e. Join R4,CONDUCENTE on Matricola=MatricolaCond giving R5 f. Project NomeConducente from R5 6.Estrarre la sigla dei taxi scorretti, cioè quelli che hanno accompagnato un cliente in un'ora e un giorno in cui non erano di turno. a. Join CORSA,TAXI on CORSA.Targa=TAXI.Targa giving R1 b. Project TARGA,DATA,ORA,SIGLA from R1 giving R2 c. Join R1,TURNO on MatricolaCond=Matricola giving R3 d. Project TARGA,DATA,ORA,SIGLA from R3 giving R4 e. R2 Minus R4 giving R5 f. Project Sigla from R5
E' chiaro che ci sono altri modi, alcuni senz'altro più efficienti, per ottenere gli stessi risultati (ammesso che le mie query funzionino!

Ad ENEA84 il compito di riportare il tutto in una canonica Algebra Relazionale o, quanto meno, in un "vero" SQL.

Grazie ma,avendo appena iniziato SQl, la vedo dura.Ciao
"TheWiz@rd":
Scusa, ma vedo molti tuoi post qui in sezione informatica. Passi dalla programmazione C ad algoritmi di ricerca. Dall'algebra booleana all'algebra relazionale per i database e poi non sai comprimere/decomprimere un file.![]()
![]()
Se è lecito posso chiederti cosa studi?
Ti stupisci di ENEA..e di lorven allora che dovremmo dire?!! E' un genietto di Informatica!!
Scusa, ma vedo molti tuoi post qui in sezione informatica. Passi dalla programmazione C ad algoritmi di ricerca. Dall'algebra booleana all'algebra relazionale per i database e poi non sai comprimere/decomprimere un file. Confused Confused
Se è lecito posso chiederti cosa studi?
Basi di Programmazione 1 ( Ansi C ) + Algoritmi e Strutture Dati ( Algoritmi di ricerca ) + Basi di Dati 1 ( Algebra relazionale )
= Primo Anno Laurea in Informatica

Per risolvere i quesiti in algebra relazionale formale si deve studiare un attimo la sintassi cmq ad esempio il primo si risolve cosi' ( dopo anni non mi ricordo benissimo, se sbaglio correggetemi! )
Estrarre Targa, Modello e Numero di Posti dei taxi in dotazione.
a. $pi$Targa,Modello,No_Posti(TAXI)
TAXI(Targa, MatricolaCond, AnnoImmatric, Sigla, Modello, Marca, No_Posti) Targa=chiave primaria
CONDUCENTE(MatricolaCond, NomeConducente,Telefono) MatricolaCond=chiave primaria
TURNO(Matricola, Data, OraInizio, OraFine) Maticola,data=chiavi primarie
CORSA(Targa, Data, Ora, LuogoPartenza, LuogoArrivo, Costo) Targa,data,ora=chiavi primarie
Forse non capisco bene la struttura di questo db, ma mi spieghi perchè hai associato più di una chiave primaria agli ultimi due elementi ?
grazie, ciao (sono una novellina in fatto di db, e mi hanno impresso marchio a fuoco in testa che chiavi primarie una sola e basta, !!)
CONDUCENTE(MatricolaCond, NomeConducente,Telefono) MatricolaCond=chiave primaria
TURNO(Matricola, Data, OraInizio, OraFine) Maticola,data=chiavi primarie
CORSA(Targa, Data, Ora, LuogoPartenza, LuogoArrivo, Costo) Targa,data,ora=chiavi primarie
Forse non capisco bene la struttura di questo db, ma mi spieghi perchè hai associato più di una chiave primaria agli ultimi due elementi ?
grazie, ciao (sono una novellina in fatto di db, e mi hanno impresso marchio a fuoco in testa che chiavi primarie una sola e basta, !!)

TAXI(Targa, MatricolaCond, AnnoImmatric, Sigla, Modello, Marca, No_Posti) Targa=chiave primaria
CONDUCENTE(MatricolaCond, NomeConducente,Telefono) MatricolaCond=chiave primaria
TURNO(Matricola, Data, OraInizio, OraFine) Maticola,data=chiavi primarie
CORSA(Targa, Data, Ora, LuogoPartenza, LuogoArrivo, Costo) Targa,data,ora=chiavi primarie
Forse non capisco bene la struttura di questo db, ma mi spieghi perchè hai associato più di una chiave primaria agli ultimi due elementi ?
grazie, ciao (sono una novellina in fatto di db, e mi hanno impresso marchio a fuoco in testa che chiavi primarie una sola e basta, !!) Very Happy
Tabella TURNO:
Matricola,data non sono due chiavi primarie, ma due campi di un'unica chiave primaria composta.
Nè Matricola, nè data, singolarmente, possono essere chiavi primarie, perchè non possono identificare univocamente ciascuna tupla della relazione.
Stesso discorso per
grazie.
Una curiosità ancora, approfitto della tua disponibilità: cosa si intende con tupla?
Una curiosità ancora, approfitto della tua disponibilità: cosa si intende con tupla?
Una curiosità ancora, approfitto della tua disponibilità: cosa si intende con tupla?
provo a rispondere io anche se non ho letto la discussione precdente.
per tupla si dovrebbe intendere semplicemente un elemento (cioe' un "record") di una tabella
alex
chiaro, grazie