 | |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
[FAQ] - Esercizi in preparazione del compitino! Clicca QUI per vedere il messaggio nel forum |
Flavia |
Grazie al mio fidatissimo collaboratore Eletabboz (..ma si scrive così poi???), ho trovato un po'di esercizi in preparazione per il compitino di basi di dati del 19 Dicembre. Sono tratti da appelli passati della Bertino, quindi ritengo siano molto molto utili per avere un'idea precisa del tipo di esamino che ci aseptta!
Li trovate a questo link:
http://www.dsy.it/forum/forumdisplay.php?s=&forumid=41
dal momento che molti di questi non hanno le soluzioni, propongo di usare questo thread per pubblicare le possibili soluzioni di tali esercizi, giusto così per vedere se riusciamo a farli correttamente. Non vorrei esaltarmi perchè magari penso di averli fatti tutti giusti, e magari sono completamente cannati! Preferisco sbagliarli ma almeno sapere dove e come sbaglio, grazie appunto a un confronto, di conferma o di smentita, riguardo le soluzioni!
Posterò le mie soluzioni il più presto possibile!
Grazie! |
ElEtAbbOZ |
Off-Topic:
Originally posted by Flavia
Grazie al mio fidatissimo collaboratore Eletabboz (..ma si scrive così poi???) :schoked: :schoked: :grr: :sbonk: :sbonk: |
Barone |
Ho provato a fare il primo es della prova del 13/01/2003
a) Select IndirizzoFornitore
From Computer,Installazione
Where Computer.Codcomputer=Installazione.CodComputer
AND DescrizioneSoftware='database'
b) Select Count(CodComputer)
From Computer,Installazione
Where Computer.Codcomputer=Installazione.CodComputer
Groupby marca,modello
c) Select CodFornitore,Count (CodFornitore)AS numeroforniture
From Computer,Installazione
Where Computer.Codcomputer=Installazione.CodComputer
Orderby numeroforniture DESC
c2)Ho provato anche in un altra versione..ditemi se è corretta...(anche se ho molti dubbi che lo sia)
Select CodFornitore
From Computer,Installazione
Where Computer.Codcomputer=Installazione.CodComputer
Groupby codfornitore
Having Max(Count(Codfornitore))
Che dite
:? :? |
Lunik |
ups se avete pazienza vedo di postare un po' di miei file :asd: :D :asd: |
luna |
grande flavy!!sei mitica!!:approved: |
futurbaggio |
Ciao,
allora, io ho fatto diversamente alcune cose
a) Select DISTINCT IndirizzoFornitore
From Computer,Installazione
Where Computer.Codcomputer=Installazione.CodComputer
AND DescrizioneSoftware='database'
Ho fatto così perchè veniva specificato che un stesso fornitore aveva sempre lo stesso indirizzo, quindi è inutile avere tuple ripetute. Piccola finezza, ma forse era un trabocchetto dell'esercizio.
b) Select Count(CodComputer), marca, modello
From Computer
Groupby marca,modello
Qui come sotto hai fatto una JOIN su Installazione che è inutile. Qui nn si richiede di trovare i computer con dei software installati, ma solo i computer con modello e marca (attributi della tabella Computer).
c) SELECT CodFornitore FROM Computer
GROUP BY CodFornitore
HAVING Count(CodFornitore) > ALL (SELECT Count(CodFornitore) FROM Computer GROUP BY CodFornitore)
le tue due versioni mi sembrano sbagliate, non voglio essere cattivo, ma lo sono parecchio :twisted:
Per altri dubbi ci sono :twisted:
Roberto |
Barone |
Immaginavo che fossero sbagliati..li ho messi perchè speravo qlc mi chiarisse cosa non andava...ora me li riguardo..
Ho un dubbio sul join..in classe mi sembra di aver sentito che basta elencare più relazioni dopo il from per avere un join..sono di un altro pianeta o c'è qlc di vero?
Grazie Roberto |
Glucks |
In particolare a me ACCESS e SQLITE mi danno errore quando si innestano funzioni di gruppo.
PER ESEMPIO non posso fare il MAX di una COUNT
MAX(COUNT(*));
Confermate?
Cmq grazie a Lunik perchè senza soluzioni eravamo nei casini... ora finalmente si capisce qualcosa di più... GRAZIE !! |
Flavia |
Cofermo tutto futurbaggio!!!
Yeahhhhhh!!!! |
Flavia |
Ecco le mie soluzioni..per ora!!!
Vi prego chiaritemi i dubbi che ho inserito all'interno della soluzioni! Soprattutto quelli sui diagrammi E-R!!!
SOLUZIONI ESERCIZI PROVA D’ESAME 02-09-2003
ESERCIZIO 1
a)Select indirizzo_fornitore from computer, installazione
where computer.codcomputer=installazioni.codcomputer
and data_installazione > ‘1995-01-01’;
Si usa questa notazione per le date???
b)Select count (codcomputer),marca, modello from computer
group by marca,modello
c)select codfornitore from computer
group by codfornitore
having count (*) >= all (select count (*) from computer group by codfornitore)
ESERCIZIO 2
Marca
Modello
Codfornitore
Indirizzo fornitore
Codcomputer
Ma se cod computer presente in entrambe le relazioni, lo metto comunque in entrambe no? Quindi codcomputer va sia in computer che in installazione?E come faccio a far capire che codcomputer nella relazione Computer è chiave primaria, mentre in installazione è una chiave esterna?
3)Create table r1 (k integre primari key, a integre)
create table r2 (k integre primari key, a integre)
insert into r1 select k,a from r
insert into r2 k,b from r
drop table r
create view r as select k,a,b from r1,r2 where r1.k=r2.k
A me sembra che la Bertino a lezione abbia scritto “create view r as select k,k,a,b from r1,r2 where r1.k=r2.k)”. A me pare strano!Quale è la soluzione giusta? |
Flavia |
SOLUZIONI ESERCIZI PROVA D’ESAME 01-07-2003-
ESERCIZIO 1
i)p(cognome, nome)(s(nomecorso=’so’ Ù votazione ‘27’)(esami)´ studenti)
ii)dolete from esami
where n_matricola in (select n_matricola from esami studenti
where esami.n_matricola = studenti.n_matricola and nome=’maria’ and cognome=’rossi’);
iii)select n_matricola from studenti
where not exists (select n_matricola from studenti, esami
where studenti.n_matricola= esami.n_matricola and anno=’2002’);
4)select cognome form esami
where studenti.n_matricola = esmai.n_matricola
and intervallo????
Group by n_matricola
Having count (*) all (select….)
Come faccioa esprimere gli intervalli???????????????
ESERCIZIO 2
Create table studenti (N-matricola decimal (7) primari key
Cognome char (20) not null
Nome char (20) not null)
Create table esami (corso# decimal (7)
…
…
Primari key (N-matricola, corso#)
Foreign key N-matricola references studenti on dolete cascade
Come faccio ad esprimere che un esame non può essere cancellato se lo studente a cui l’esame si riferisce è presente nella base di dati????? |
Flavia |
ESERCIZIO FATTO IN CLASSE
Abbiam la relazione
Prodotti (P#, nome)
PRODUTTORI (pr#,nomeproduttori, PIVA)
FORNITURE (P#,pr#)
Formulare interrogazione sql che determini ogni prodotto restituendone il codice per cui esiste un prodotto con lo stesso nome
Select p# from prodotti x
Where exists (select * from prodotti y where y.p# = x.p# and y.nome = x.nome);
Io l’avevo fatto così: va bene lo stesso?
Select x.p# from prodotti x
Where exists (select y.p# from prodotti y where y.p# = x.p# and y.nome = x.nome); |
Flavia |
SOLUZIONI ESERCIZI PROVA D’ESAME 16-06-2003
ESERCIZIO 1
i)P(cognomi_revisori) (s(specializzazione=’db’ (revisori)) - P(cognomi_revisori) (s(specializzazione=’db’ (revisori) ´ assegnamenti)
ii)select prog# from progetti
where datefine > ‘2003-04-14’;
E’ giusto scrivere le date così???
iii)Select x.prog#, x.budget from progetti x
where x.budget >= all (select y.budget from progetti y where x.budget <> y.budget)
iiii) Select rev# from assegnamenti
group by rev# havnign count (*) >=all (select count(*) from assegnamenti group by rev#
ESERCIZIO 2
Create table progetti (prog# decimal (4) primary key
….
…..
constraint budget-constraint check budget >=20.000 and budget <=100.000);
Create table revistori (….
…..
…..
specializzazione char (20) check (specializzazione in (‘bd’,’sicurezza’,’sd,’sm’,’so’)
;
Create table assegnamenti (prog# decimal(4)
Rev# decimal (4)
Dassegnamento date
Primary key (prog#, rev#)
Foreign key (prog# references progetti on delete cascade)
Foreign key (rev#) references revidori on delete restrinct)
ESERCIZIO 3
Prog#
Nome prog
Data inizio
Data fine
budget
Dubbio megaamletico!!!Dal momento che prog# e rev# sono chiavi esterne per assegnamenti, devo inserirle anche in “assegnamenti”??Cioè. prog# e rev# sono gli attributi dell’associazione ?Come faccio a far capire che ci si riferisce proprio al prog# di progetti e al rev# di revisori?
Devo aggiungere un nuovo attributo a revisori o basta così??
ESERCIZIO 4
Create view v as
Select rev#, nome, cognome, prog# from revisori, assegnamenti where revisori.rev#= assegnamenti.rev# |
Flavia |
grazie mille lunik!!!!
Anche se devo dire sono impazzita un po'con tutti quei file...ci sono molti doppioni!!!!
:-)))) |
futurbaggio |
Originally posted by Flavia
Cofermo tutto futurbaggio!!!
Yeahhhhhh!!!!
caspita, hai messo su 3000 esercizi in una sola botta!
Solo per il controllo ci dovrò perdere un'intera serata :twisted:
Complimenti cmq!
Roberto |
Flavia |
Mi han detto che non potevo mettere i link!!!
Avevo fatto tutto bello in word!!!
comunque, i file di lunik sono tantissimi, ma alla fine si riducono a poche unità perchè sono ripetuti anche 5 volte!!! |
futurbaggio |
Originally posted by Glucks
PER ESEMPIO non posso fare il MAX di una COUNT
MAX(COUNT(*));
Confermate?
E' un errore SQL, confermo! :twisted:
Count(*) ti restituisce un numero, fare un MAX di un numero nn significa niente. Quindi dà errore...
Cmq Access utilizza un dialetto di SQL, ridotto e a volte anche leggermente diverso.
Roberto |
futurbaggio |
Originally posted by Barone
Ho un dubbio sul join..in classe mi sembra di aver sentito che basta elencare più relazioni dopo il from per avere un join..sono di un altro pianeta o c'è qlc di vero?
Elencare + tabelle nella clausola FROM corrisponde a fare il prodotto cartesiano delle varie tabelle.
Solo con le condizioni nella clausola WHERE si effettua una JOIN, l'esempio che hai postato è un NATURAL JOIN perchè gli attributi delle tabelle hanno nomi uguali.
Roberto |
futurbaggio |
Originally posted by Flavia
ESERCIZIO 2
Marca
Modello
Codfornitore
Indirizzo fornitore
Codcomputer
Sinceramente nn ho capito bene cosa hai fatto! :twisted:
Cmq le entità nella mia versione sono:
- Computer (PK: codComputer;)
- Fornitore (PK: codFornitore)
- Software (PK: codSoftware;)
Mentre le relazioni sono
- Installazione ( Software --> Computer; 0 a molti perchè un software può essere installato 0 oppure N volte, un computer può essere vuoto oppure avere N software)
- Forniture ( Computer [1,1] ---> [0,N] Fornitore)
Che dite?
Roberto |
futurbaggio |
Originally posted by Flavia
4)select cognome form esami
where studenti.n_matricola = esmai.n_matricola
and intervallo????
Group by n_matricola
Having count (*) all (select….)
Come faccioa esprimere gli intervalli???????????????
Come faccio ad esprimere che un esame non può essere cancellato se lo studente a cui l’esame si riferisce è presente nella base di dati?????
4) mia versione, intervallo compreso :twisted:
SELECT cognome FROM studenti s, esami e
WHERE s.n-matr = e.n-matr AND (Anno =2002 AND Mese >= 3 OR Anno=2003 AND Mese < 9)
GROUP BY n-matr
HAVING count(*) >= ALL
(SELECT count(*) FROM esami WHERE (anno = 2002 AND mese > 3) OR (Anno = 2003 AND Mese < 9)
GROUP BY n-matr)
Ti ho specificato per bene l'intervallo!
Per non cancellare esami di studenti ancora nel DB devi mettere il vincolo:
ON DELETE RESTRICT su n-matr della tabella esami
Roberto |
futurbaggio |
Originally posted by Flavia
iii)Select x.prog#, x.budget from progetti x
where x.budget >= all (select y.budget from progetti y where x.budget <> y.budget)
Mi sa ke hai sbagliato qua:
il WHERE della subquery non mi pare abbia senso, perchè due progetti possono avere lo stesso budget (che non è UNIQUE per chiarirci).
Quindi bastava fare come al solito, al max potevi escludere i progetti con codice uguale ma nn ha senso perchè ogni progetto ha un budget uguale a se stesso, quindi tutto è ok in questa versione:
Select prog#, budget from progetti where budget >= all (select budget from progetti)
ALIAS facoltativi in questo caso!
Originally posted by Flavia
ESERCIZIO 3
Prog#
Nome prog
Data inizio
Data fine
budget
Dubbio megaamletico!!!Dal momento che prog# e rev# sono chiavi esterne per assegnamenti, devo inserirle anche in “assegnamenti”??Cioè. prog# e rev# sono gli attributi dell’associazione ?Come faccio a far capire che ci si riferisce proprio al prog# di progetti e al rev# di revisori?
Comincia a venirmi il dubbio che effettivamente io non so cosa siano gli schemi!!!
Tu cosa hai capito? (urge spiegazione, altrimenti vado in crisi :cool:
Cmq lo schema è abbastanza semplice nella mia versione:
Entità
- Revisori
- Progetti
Relazioni
Assegnamenti
Per la modifica basta aggiunere la colonna "tipologia" a revisori e dentro ci piazzi "senior" o 'junior' in base alla tipologia.
Roberto
PS Tezzone e caravone, agnune agnune a case lore. |
morf |
io avrei un dubbio che potrà essere una baggianata, ma mi devo preparare all'esame in questi 3 giorni e ho la testa un po' incasinata ;) ... una volta in classe è stato svolto questo esercizio:
Informazioni su affiliazioni di associazioni di informatica ... una persona può essere associata a più associazioni
Relazione SOCI (codicefiscalesocio, nomesocio, siglassociazione, annoaffiliazione)
determinare il codice fiscale delle persone che sono affiliate sia a ACM che a IEEE
la prof l'aveva risolto così:
SELECT codicefiscale FROM Soci
WHERE siglaassociazione = 'IEEE'
AND codicefiscale IN (SELECT codicefiscale FROM soci WHERE siglaassociazione = 'ACM');
e io questo lho capito ... ma è errato scriverla così? se sì, perchè?
SELECT codicefiscale FROM Soci
WHERE siglaassociazione = 'IEEE'
AND siglaassociazione = 'ACM';
grazie ;) |
Flavia |
Ciao Morf!
Si la tua versione e errata!Se scrivi cosi infatti, vuol dire che tu ricerchi una tupla in cui il valore di siglaassociazione e contemporaneamente ACm e IEEE!Ma non e possibile, c e un solo valore per ogni attributo! In questo modo ricerchi un codice fiscale al quale, nella stessa tupla e non in due distinte, siano associati due valori!
Ma tu devi selezionare DUE tuple distinte tali che il valore del codice fiscale sia uguale, ma i valori di siglaassociazione siano, per una IEEE, per l-altra ACM!
Spero sia chiaro!:-D |
Flavia |
bene bene!Grazie futurbaggio, almneo ho un confronto e ti ringrazio per avermi fatto notare gli errori!I miei piu fidi compagni non hanno ancora inizaito a studiare!!!!!!!!:evil: :evil: :evil: :evil:
Per gli schemi relazionali non avevo idee di come esprimere le chiavi esterne..ma mi sa proprio che come hai fatto tu sia giusto. Si si..per quanto riguarda lo schema di progetti, revisori e assegnamenti, e abbastanza semplice:
ENTITA con relativi attributi>
Progetti (Prog#, nomeprog,datainizio,datafine,budget)
Revisori (Rev#, nomerevisore,cognomerevisore,nazionalitarevisore,s
pecializzazione(
ASSOCIAZIONI:
Assegnamenti(Dataassegnamento)
PROGETTI --> ASSEGNAMENTI (0,n)
REVISORI --> ASSEGNAMENTI (0,n)
Per l estensione, quindi, aggiungo semplicemtne tra gli attributi di Revisori l attributo tipologia!
E tutto giusto e chiaro cosi?
:cool: |
Flavia |
5 punti per una cosa del genere?
..a me pare troppo semplice.... |
Flavia |
Dubbio: ho in mano due soluzioni per lo stesso esercizio, il primo del tema d esame del 4-10-2002, quello su esamibd e ricercatori e esercitatori!
Il quesito tre chiede di trovare il nome dei ricercatori i cui gruppi hanno ottenuto il massimo incremento medio a partire dai voti dello scritto.
MIA SOLUZIONE:
SELECT CognomeRic
FROM Ricercatori,Esercitatori, EsamiDB
WHERE Ricercatori.CodiceRic=Esercitatori.CodiceRic AND
esercitaotir.Gruppoid = esamidb.gruppoID
group by gruppo.id
HAVING AVG(votoFinale - votoScritto) >= ALL (SELECT AVG(votoFinale - votoScritto) FROM EsamiBD WHERE group by gruppoID
ALTRA VERSIONE
SELECT CognomeRic
FROM Ricercatori,Esercitatori
WHERE Ricercatori.CodiceRic=Esercitatori.CodiceRic AND Esercitatori.GruppoID = (SELECT Esercitatori.GruppoID FROM EsamiBD, Esercitatori WHERE EsamiBD.GruppoID=Esercitatori.GruppoID GROUP BY Esercitatori.GruppoID HAVING AVG(votoFinale - votoScritto) >= ALL (SELECT AVG(votoFinale - votoScritto) FROM EsamiBD, Esercitatori WHERE EsamiBD.GruppoID=Esercitatori.GruppoID GROUP BY Esercitatori.GruppoID));
La mia soluzione e troppo semplicistica?????????? |
morf |
Originally posted by Flavia
Ciao Morf!
Si la tua versione e errata!Se scrivi cosi infatti, vuol dire che tu ricerchi una tupla in cui il valore di siglaassociazione e contemporaneamente ACm e IEEE!Ma non e possibile, c e un solo valore per ogni attributo! In questo modo ricerchi un codice fiscale al quale, nella stessa tupla e non in due distinte, siano associati due valori!
Ma tu devi selezionare DUE tuple distinte tali che il valore del codice fiscale sia uguale, ma i valori di siglaassociazione siano, per una IEEE, per l-altra ACM!
Spero sia chiaro!:-D
chiarissima ... ora che me lhai spiegato, mi sento un pirla: mi rendo conto dell'immensa cagata che ho scritto :D |
morf |
flavia ... il tema d'esame che citi tu credo sia stato affrontanto anche in classe, visto che ho appuntato la soluzione data dalla prof ... l'unica differenza è che la query voleva "il gruppo (o i gruppi) che ha ottenuto il massimo incremento medio a partire dai voi dello scritto", escludendo il nome del ricercatore.
visto che non ho ancora studiato benissimo :D, l'unica cosa che posso riportarti è la soluzione proposta dalla Bertino sulla query che ho scritto qui sopra:
SELECT GruppoId FROM EsamiBD
group by GruppoID
HAVING AVG(VotoFinale - VotoScritto) >= ALL (SELECT AVG(VotoFinale - VotoScritto) FROM EsamiBD group by GruppoId);
mi spiace se non ti ho aiutato :( :rolleyes: |
Flavia |
:)
Ehehe!Non fa nulla!!!
In effetti e un casino pazzesaco, perche con tutti i link di esercizi, trovo 30 versioni diverse dello stesso esercizio e 40 uguali!!!!
Buono studio!!!!!!!!!!!!:cool: |
Lunik |
Off-Topic:
scusate x i file ma non avevo molto tempo x star lì e vedere cosa c'era :( |
joker402 |
Originally posted by Flavia
I miei piu fidi compagni non hanno ancora inizaito a studiare!!!!!!!!:evil: :evil: :evil: :evil:
come osi?? se non era per i miei schemi er... :evil:
Per gli schemi relazionali non avevo idee di come esprimere le chiavi esterne..ma mi sa proprio che come hai fatto tu sia giusto.
Si gli schemi anche io li ho fatti più simili a futurbaggio.
Per le date anche io nei miei esercizi ho scritto >'aaaa-mm-gg'
Ora tocca anche a me fare una domanda: quando un esercizio chiede di scrivere i comandi per creare una relazione, e uno degli attributi deve avere un valore nell'intervallo ad es fra 2 e 50 (c'era in un esercizio in cui NumeroArticoliAcquistati doveva essere minimo 2 e massimo qualcosa). Ecco, io cosa devo scrivere??? devo creare un dominio? grazie!
esempio:
CREATE TABLE Acquisti
(Art# integer
NumeroArticoliAcquistati .............
ecc ecc |
maomix |
Ciao a tutti , qualcuno può postare una soluzione completa di una qualsiasi prova d' esame in modo da avere un modello di base da seguire ? |
futurbaggio |
Originally posted by joker402
Ecco, io cosa devo scrivere??? devo creare un dominio? grazie!
CREATE TABLE (
Art# Number PrimaryKey,
ArtAcquistati Number CHECK ArtAcquistati > 2 AND ArtAcquistati < 50
...
)
Oppure crei un CONSTRAINT ma nn cambia molto visto ke riguarda il singolo attributo!
Roberto |
futurbaggio |
Originally posted by maomix
Ciao a tutti , qualcuno può postare una soluzione completa di una qualsiasi prova d' esame in modo da avere un modello di base da seguire ?
Lunik ha messo su un file, in cui dovrebbero essercene diverse!
Ti dico 'dovrebbero' perchè nn l'ho visto :cool:
Roberto |
Lunik |
Originally posted by maomix
Ciao a tutti , qualcuno può postare una soluzione completa di una qualsiasi prova d' esame in modo da avere un modello di base da seguire ?
ho postato un po' di file (alcuni sono doppi..anche tripli.) con soluzioni di temi d'esame :D |
Flavia |
L'ho postati anche io!!Guarda qualche replay prima!Non sono tutti, non sono giusti al 100%, pero ti danno un idea di come sarà strutturata la prova d esame!!! |
UZI |
Scusate, scusate... ma all'esame sarà concesso l'uso di libri e/o appunti o cosa? |
joker402 |
Off-Topic:
Originally posted by UZI
Scusate, scusate... ma all'esame sarà concesso l'uso di libri e/o appunti o cosa?
per l'ennesima volta, SI! cmq questo thread è sugli esercizi, ce n'è un'altro per le domande sull'esame. |
joker402 |
Originally posted by futurbaggio
CREATE TABLE (
Art# Number PrimaryKey,
ArtAcquistati Number CHECK [...] Oppure crei un CONSTRAINT ma nn cambia molto visto ke riguarda il singolo attributo!
grazie, mi ero perso le pagine sul check... |
Bruzzanboy |
ho un dubbio...
in alcuni temi d'esame degli appelli passati c'è una domanda che chiede di definire uno schema E-R equivalente allo schema relazionale....
intende che bisogna disegnare lo schemino o che bisogna fare quella roba tipo:
Progetti(P#, nome, zicca, ecc...)???
mi riferisco in particolare all'appello del 16/06/03 e a quello del 13/02/03 che ho trovato nei file di Lunik
grazie in anticipo! :) |
morf |
lo schema E-R è lo schema Entity Relationship, quindi credo che lo schemino ci stia ... quella riga che hai scritto tu è una semplice definizione di Relazione con i suoi attributi ... bho :D |
Bruzzanboy |
si, deve essere come pensavo, bisogna fare lo schemino bello bello...
ok, grazie mille
ps: stai rifacendo il sito eh? acc, volevo sentire qualche pezzo nuovo... |
kurt |
Ciao,
nel testo d'esame del 13/2/2003
l'es. 1 (iv)
quello dove chiede gli attributi chiave della relazione Acquisti nei due casi, secondo voi come si risolve?
perchè non capisco, a me in tutt'e due i casi viene da considerare come chiave primaria (Data, Articolo#, Fornitore#)
boh.. |
UZI |
Mah, per quel che c'ho capito io penso che nel primo caso sia sufficiente PRIMARY KEY (data, articolo#)... |
Flavia |
Ole!
(PROBABILE) SVOLGIMENTO DEL PRIMO COMPITINO DI GIBD – COMPITO B
Esercizio 1
Aa)SELECT DISTINCT TITOLO FROM VIDEO, CLIENTE, NOLEGGIOVIDEO
WHERE VIDEO.CODVIDEO = NOLEGGIOVIEDO.CODVIDEO
AND NOLEGGIOVIDEO.CODCLIENTE=CLIENTE.CODCLIENTE
AND NOME =’ENRICO VERDI’ AND GENERE =’AVVENTURA’;
Ab)SELECT CODCD FROM NOLEGGIOCD
GROUP BY CODCD
HAVING COUNT (*) >= ALL (SELECT COUNT (*) FROM NOLEGGIOCD
GROUP BY CODCD);
Ac)DELETE FROM NOLEGGIOVIDEO
WHERE CODNOLEGGIO IN
(SELECT CODNOLEGGIO FROM NOLEGGIOVIDEO, CLIENTE
WHERE NOLEGGIOVIDEO.CODCLIENTE =CLIENTE.CODCLIENTE
AND NOME =’ENRICO VERDI’);
E qui iniziano le noti “dolenti”, nel senso che questa è stata la parte che mi ha richiesto più tempo!
Ba)Õcodcliente (CLIENTE) - Õcodcliente (NOLEGGIOVIDEO) - Õcodcliente (NOLEGGIOVIDEO´NOLEGGIOCD)
Ma deve essere mooolto errata, me ne sono accorta solo ora…
Bb) Õcodcliente (CLIENTE) - Õcodcliente (sanno-noleggio =2002 (NOLEGGIOVIDEO U NOLEGGIOCD)
Dall’ insieme dei codici di tutti i clienti ho tolto quei clienti che, o per i cd, o per i video, o per entrambi, hanno effettuato un noleggio nell’anno 2002! Tanto anno-noleggio era un atributo in comune e ho potuto fare un unione!
ESERCIZIO 2
Per le tabelle, ho fatto semplicemtne comandi di creazione tabelle
CREATE TABLE CLIENTE (Codcliente decimal (7) not null,
Nome char (30) not null,
Indirizzo char (30) not null,
Primari key (Codcliente));
CREATE TABLE CD (Codcd decimal (7) not null,
Titolo char (20) not null,
Autore char (20) not null,
Primary key (Codcd));
CREATE TABLE VIDEO (Codvideo decimal (7) not null,
Titolo char (20) not null,
Genere char (20) not null,
Primary key (Codvideo));
CREATE TABLE NOLEGGIOCD (Codnoleggio decimal (7) not null,
Codcliente decimal (7) not null,
Codcd decimal (7) not null,
Mese-noleggio integer (4) check (Mese-noleggio >=1 and Mese-noleggio <=12,
Anno-noleggio (10) check (Anno-noleggio >=2002),
Primary key (Codnoleggio),
Foreign key (Codcliente) regerences Cliente
On delete cascade,
Foreign key (Codcd) regerences Noleggiocd
On delete restrict);
CREATE TABLE NOLEGGIOVIDEO (Codnoleggio decimal (7) not null,
Codcliente decimal (7) not null,
Codvideo decimal (7) not null,
Mese-noleggio integer (4) check (Mese-noleggio >=1 and Mese-noleggio <=12,
Anno-noleggio (10) check (Anno-noleggio >=2002),
Primary key (Codnoleggio),
Foreign key (Codcliente) regerences Cliente
On delete cascade,
Foreign key (Codvideo) regerences Noleggiovideo
On delete restrict);
ESERCIZIO 3
ENTITA’ =AUTORE, CLIENTE, CD, VIDEO
ASSOCIAZIONI = (NOLEGGIA IL CD, NOLEGGIO IL VIDEO, SCRITTO DA)
Ho messo due associazioni diverse per noleggiare perché penso che codnoleggio abbai numerazioni diverse per i cd e i video, ovvero partiranno tutti e due da 0!
AUTORE à CD =(0,1)
CD à AUTORE = (1,1)
CLIENTE à CD = (0,n)
CD à CLIENTE = (0,n)
CLIENTE à VIDEO = (0,n)
VIDEO à CLIENTE = (0,n) |
futurbaggio |
Ciao flavia,
io ho fatto diversamente alcune cose...
Per l'algebra relazionale bastava:
a) fare una sottrazione tra noleggioCD e NoleggioVideo, con relative proiezioni su codCliente.
b) fare una cosa del genere:
(Cliente - S_anno=2002(NoleggioCD)) - S_anno=2002(NoleggiVideo)
Tutti con la proiezione su codCliente, nn le metto perchè verrebbe una porcheria. In sostituzione si potevare fare l'unione tra NoleggioCD e NoleggioVideo e poi fare una sola differenza. La JOIN mi sa di sbagliato perchè così seleziona solo i clienti che hanno noleggiato entrambi...
Per lo schema ER:
mi sa che tu hai considerato un po' troppe entità, vedi autore (che secondo me è un attributo di CD/video). Anche se teoricamente potrebbe non correggertelo. mah, vedremo!
Associazioni e cardinalità mi sembrano ok, cmq io consiglio di andare a vedere il compitino se il voto nn vi convince perchè un assistente mi diceva una cosa, la prof un'altra. Penso a questo punto dipenda tutto da chi ti corregge il compito.... boh!
Roberto |
Flavia |
Ah ok..si si oil primo sull'algebra relazionale devo aver fatto un casino!
Per il diagramma E-R, io ho aggiunto anche l'entità autore, dal momento che nell'esercizo specificava che un cd aveva solo un autore!Ho quindi pensato che questa cosa potesse esere tradotta in un vicnolo di cardinalità tra Cd e AUTORE (1,1), giusto per sfruttare le informazioni che ci aveva messo nella traccia.. |
Flavia |
Ma il primo esercizo sull'algebra relazionale..anche a me era venuta in mente una cosa così...ovvia e semplcissima peraltro..ma in questo modo ti riportava tutte le volte che un cliente aveva noleggiato Cd e non video!Cioè, se fai così, un cliente che avesse noleggiato tanti CD ti veniva riportato tantissime volte!
Però si, dovresti aver ragione tu...:cool: |
joker402 |
Mi servirebbe capire come si facevano questi esercizi, che erano nel compitino del 19 dic., dato che ho capito cosa ho sbagliato, ma non come si fanno correttamente.
C'è qualche anima buona che se li ricorda o mi regala 5 minuti per scrivermeli?
il testo:
Esercizio 1) Si consideri il seguente schema relazionale:
NOLEGGIOCD(CodNoleggio, CodCliente, CodCD, Mese-Noleggio, Anno-Noleggio)
NOLEGGIOVIDEO(CodNoleggio, CodCliente, CodVideo, Mese-Noleggio, Anno-Noleggio)
CLIENTE(CodCliente, Nome, Indirizzo)
CD(CodCD, Titolo, Autore)
VIDEO(CodVideo, Titolo, Genere)
relativo ad un negozio di noleggi di videocassette e CD. Ogni noleggio è effettuato da un solo cliente ed è relativo ad un solo materiale (videocassetta oppure CD). Gli attributi Mese-Noleggio ed Anno-Noleggio indicano, rispettivamente, il mese e l'anno in cui è stato effettuato il noleggio. I CD hanno un titolo e un autore, che può essere un singolo cantante oppure il nome di un gruppo. Le videocassette oltre al titolo hanno un genere (es., drammatico, giallo, avventura).
A) Si richiede di formulare in SQL le seguenti interrogazioni e modifiche:
a) determinare i titoli di tutte le videocassette noleggiate dal cliente Enrico Verdi il cui genere è avventura
c) cancellare i noleggi di videocassette effettuate dal cliente Enrico Verdi. |
futurbaggio |
Originally posted by joker402
A) Si richiede di formulare in SQL le seguenti interrogazioni e modifiche:
a) determinare i titoli di tutte le videocassette noleggiate dal cliente Enrico Verdi il cui genere è avventura
c) cancellare i noleggi di videocassette effettuate dal cliente Enrico Verdi.[/i]
Mmmm... qualke post su c'è la soluzione di Flavia, che mi pare sia giusta! |
Flavia |
Si joker..le mie soluzioni sopra dovrebbero proprio essere giuste..dato che visto il voto ho sbagliato solo quella cosa dell'algebra relazionale!
:-) |
joker402 |
:oops: che scemo, avevo cercato nelle pagine indietro e non in questa..chiedo scusa ;)
grazie comunque a entrambe! |
Dodo |
non è che qualcuno ha il resto del testo del compitino? abbiamo le soluzioni ma non il testo completo :D |
Flavia |
Gyarda che credo che futurbaggio sia un LUI
Comuqneu joker guarda anche il forum sui comp,ementari che ho aperto..ci son cose interessanti che ho scoperto..poi magari mart o mercoledì ci mettiamo daccordo dal vivo su quali mettere nel piano di studi!
Ah..ovviamente tu domani appena tornato dall'esame posterai quali erano gli esercizi sulla parte di laboratorio!
-) |
joker402 |
ECCO IL TESTO DEL COMPITINO DEL 19 (VERSIONE B):
l'ho scannerizzato con OCR, se ci sono errorini è per quello.
Esercizio 1) Si consideri il seguente schema relazionale:
NOLEGGIOCD(CodNoleggio, CodCliente, CodCD, Mese-Noleggio, Anno-Noleggio)
NOLEGGIOVIDEO(CodNoleggio, CodCliente, CodVideo, Mese-Noleggio, Anno-Noleggio)
CLIENTE(CodCliente, Nome, Indirizzo)
CD(CodCD, Titolo, Autore)
VIDEO(CodVideo, Titolo, Genere)
relativo ad un negozio di noleggi di videocassette e CD. Ogni noleggio è effettuato da un solo cliente ed è relativo ad un solo materiale (videocassetta oppure CD). Gli attributi Mese-Noleggio ed Anno-Noleggio indicano, rispettivamente, il mese e l'anno in cui è stato effettuato il noleggio. I CD hanno un titolo e un autore, che può essere un singolo cantante oppure il nome di un gruppo. Le videocassette oltre al titolo hanno un genere (es., drammatico, giallo, avventura).
A) Si richiede di formulare in SQL le seguenti interrogazioni e modifiche:
a) determinare i titoli di tutte le videocassette noleggiate dal cliente Enrico Verdi il cui genere è avventura
b) determinare il CD per cui sono stati effettuati il maggior numero di noleggi;
c) cancellare i noleggi di videocassette effettuate dal cliente Enrico Verdi.
Si richiede di esprimere in Algebra Relazionale le seguenti interrogazioni:
a. determinare i codici dei clienti che hanno effettuato solo noleggi per CD;
b. determinare i codici dei clienti che non hanno effettuato alcun noleggio nel 2002.
2 Dato lo schema relazionale di cui al punto (1), si specifichino i comandi SQL di creazione delle relazioni con le opportune clausole PRIMARY KEY e FOREIGN KEY, tenendo presente che:
• gli attributi sottolineati nello schema sono chiavi;
• le chiavi esterne hanno lo stesso nome della corrispondente chiave primaria referenziata nella corrispondente relazione;
• si vogliono esprimere i seguenti vincoli di integrità referenziale:
- se si cancella un cliente i noleggi effettuati dal cliente vanno anch'essi
cancellati;
- non è possibile cancellare un CD o una videocassetta, se ci sono noleggi relativi a tale CD o videocassetta.
• si vogliono esprimere i seguenti vincoli:
- il mese di noleggio è un intero compreso tra 1 e 12
- l'anno di noleggio deve essere maggiore del 2002.
3) Dato lo schema relazionale di cui al punto uno, si specifichi uno schema ER equivalente.
Off-Topic:
Originally posted by Flavia
Gyarda che credo che futurbaggio sia un LUI :sbonk: lo so, io uso 'entrambe' anche per i maschietti, al massmo dovrò rivedere il mio italiano... |
futurbaggio |
Originally posted by Flavia
Gyarda che credo che futurbaggio sia un LUI
Io cerco di aiutarvi e voi mi umiliate così :shock:
Roberto
PS per chi ha dubbi posso dimostrarlo cmq :twisted: |
AleBattista |
Qualcuno sa dirmi che tipo di esercizi sono stati affrontati durante le lezioni di laboratorio di Perlasca???
Avrei abbastanza urgenza di saperlo dato che gli esercizi del compitino di martedi 20 saranno simili a quelli fatti a lezione di laboratorio!
Grazie |
Flavia |
suppongo che tu sia un LUI!!!!!
Solo che joker ha scritto entrambe per riferire di me e te insieme!!! |
futurbaggio |
Originally posted by Flavia
suppongo che tu sia un LUI!!!!!
Credo? Suppongo?????
Io SONO un ragazzO :twisted:
Roberto |
Flavia |
Originally posted by futurbaggio
Credo? Suppongo?????
Io SONO un ragazzO :twisted:
Roberto
Ah ecco!Dillo a joker! |
angelko |
ho una domanda un po' stupida... nel ex7.asp all'inizio si creano due variabili strNome e strCognome x reperire quello che si era inserito in un form precedente,se avessi dovuto creare una variabile x il num di matricola,anche se è un numero,l'avrei chiamata sempre strMatricola,giusto?è solo il nome quello... l'avrei anche potuta chiamare... PincoPallino,no? se mi sbaglio mi avvertite? grazie mille |
morf |
esatto, è solo il nome che ci dai tu :) |
angelko |
ok grazie mille morf :D |
|
|
|
|