Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Nel Formula 1 Technology and Media Centre di Biggin Hill, la velocità delle monoposto si trasforma in dati, immagini e decisioni in tempo reale grazie all’infrastruttura Lenovo che gestisce centinaia di terabyte ogni weekend di gara e collega 820 milioni di spettatori nel mondo
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
Il nuovo gimbal mobile DJI evolve il concetto di tracciamento automatico con tre modalità diverse, un modulo multifunzionale con illuminazione integrata e controlli gestuali avanzati. Nel gimbal è anche presente un'asta telescopica da 215 mm con treppiede integrato, per un prodotto completo per content creator di ogni livello
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-02-2008, 16:33   #1
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
[DATABASE] Domandina urgente circa cardinalità di una relazione

Ciao,
per il progetto dell'esame di base di dati mi trovo a dover realizzare il DB di un piccolo sistema di aste online (una versione della baia molto semplificata).

Considerando queste due entità:

UTENTE: che rappresenta gli utenti iscritti al sistema e vendono o comprano oggetti

INSERZIONE: rappresenta gli oggetti messi in vendita dagli utenti.

Poi ho una relazione chiamata VENDE che lega insieme UTENTE e INSERZIONE (in pratica associa alcuni utenti ai prodotti che vendono).

In UTENTE ci saranno sia utenti venditori che utenti acquirenti.

Volendo gestire i feedback che gli acquirenti danno ai venditori circa il loro comportamento durante la vendita di un particolare oggetto (in pratica l'utente acquirente può dire al termine della vendita se il venditore siè comportato in maniera corretta, scorretta o neutra).

La relazione FEEDBACK_VENDITORE coinvolgerà: UTENTE, UTENTE (in maniera ricorsiva) e INSERZIONE.

In pratica un utente acquirente dà un feedback ad un utente venditore in relazione ad una ed una sola determinata inserzione.

Per quanto riguarda la cardinalità secondo voi va bene così?

1) Sul braccio che và da UTENTE a FEEDBACK imposto (0, n) perchè un utente acquirente può lasciare minimo 0 feedback (non ha ancora comprato nulla) e massimo n feedback (ha comprato più oggetti).

2) Sul braccio da FEEDBACK ad UTENTE imposto sempre (0, n) in quanto un utente venditore può aver ricevuto minimo 0 feedback (ancora non ha venduto alcun prodotto oppure il prodotto non è ancora stato ricevuto dall'acquirente che non ha ancora rilasciato il feedback) e massimo n (perchè potrebbe aver venduto n oggetti)

3) sul braccio da FEEDBACK ad INSERZIONE imposto (1,1) in quanto un feedback è riferito ad una ed una sola inserzione messa in vendita.

Per rendere più chiaro allego immagine, nello schema allegato la situazione è un po'più complessa perchè gestisco sia i feedback che gli acquirenti danno ai venditori mediante una relazione, sia il viceversa...ma alla fine il discorso non cambia.



Per favore ditemi se va bene...ho pochissimo tempo

Ultima modifica di D4rkAng3l : 16-02-2008 alle 16:44.
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 16:45   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da D4rkAng3l Guarda i messaggi

3) sul braccio da FEEDBACK ad INSERZIONE imposto (1,1) in quanto un feedback è riferito ad una ed una sola inserzione messa in vendita.

Per favore ditemi se va bene...ho pochissimo tempo
E' sbagliato.
Per motivi analoghi ai precedenti, potrebbe non esistere Feedback per un'inserzione... almeno fino a che non e' stata venduta.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 16:55   #3
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
E' sbagliato.
Per motivi analoghi ai precedenti, potrebbe non esistere Feedback per un'inserzione... almeno fino a che non e' stata venduta.
mm forse mi sono espresso male, i dati verranno messi nella "tabella feedback" solamente dopo che l'utente ha ricevuto il pacco dal venditore e gli ha dato una valutazione e l'utente non potrà fare altri acquisti sul sistema finchè non metterà darà il feedback al venditore.

Te come lo faresti?

Grazie
Andrea
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 17:09   #4
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
No, quella e' giusta, avevo scritto prima che pubblicassi il disegno.

Pero' non so bene per le 3 in alto.
Quando avevo studiato il la semantica del modello ER, per quanto riguarda le relazioni, la chiave primaria (che sia fisica, che sia logica poco importa) si poteva dedurre direttamente dalle entita' che vi insistevano.
Tu dovrai per forza mettere almeno il tempo nella chiave primaria (fisica o logica, non importa ripeto).
Non ve l'hanno fatta mai modellare l'entita' tempo?

Quando l'avevo studiata io era una tabella tratteggiata, che puntava a tutte le relazioni in cui il tempo serviva.
Tratteggiata perche' poteva essere creata veramente, oppure poteva essere alla fine usato semplicemente un campo di tipo DATA, il cui tipo e' presente in tutti i Database.
Nel tuo caso appunto commento, vendita e offerta, le cui PK dovrebbero contenere appunto il tempo in chiave.

Come dire, il "tempo" in quelle 3 tabelle e' ben diverso dal "tempo" della tabella inserzione, o della tabella Feedback, che li' sarebbero usati come attributo.(Istante di pubblicazione, Istante dell'inserzione, etc.)
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 16-02-2008 alle 17:16.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 17:35   #5
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
A parte il tratteggio della tabella Tempo, intendo una cosa del genere



Se noti la data ogni tanto va a finire sopra, ovvero tra i campi identificativi in questo modello (chiave), ogni tanto va a finire sotto, solo come attributo.
Da te, indipendentemente dalla soluzione grafica, l'ho visto sempre solo "sotto", ovvero tra gli attributi non identificativi.
Coem dire di nuovo, la DATA/ORA di un commento e' ben diversa dalla DATA/ORA di nascita dell'utente.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 16-02-2008 alle 17:37.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 17:36   #6
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
quindi secondo te è giusto così?
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 17:39   #7
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Boh? Dipende da cosa vi hanno spiegato.
Ve l'hanno spiegata la differenza tra "Relazione identificativa" e "Relazione non identificativa"?
Ovvero, campo di una tabella che punta ad un altra (foreign key) e che partecipa anche alla chiave primaria della tabella stessa (Relazione identificativa)
oppure campo di una tabella che punta ad un altra (foreign key) ma che NON partecipa anche alla chiave primaria della tabella stessa (Relazione non identificativa) perche' e' solo un attributo?
(Come per esempio la mia inserizione nella tabella Messaggio. L'insezione non e' identificativa, perche' per identificare univocamente un messaggio e' sufficiente la terna (UtenteA, UtenteB, istante ))
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 16-02-2008 alle 17:42.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 17:46   #8
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Boh? Dipende da cosa vi hanno spiegato.
Ve l'hanno spiegata la differenza tra "Relazione identificativa" e "Relazione non identificativa"?
Ovvero, campo di una tabella che punta ad un altra (foreign key) e che partecipa anche alla chiave primaria della tabella stessa (Relazione identificativa)
oppure campo di una tabella che punta ad un altra (foreign key) ma che NON partecipa anche alla chiave primaria della tabella stessa (Relazione non identificativa) perche' e' solo un attributo?
(Come per esempio la mia inserizione nella tabella Messaggio. L'insezione non e' identificativa, perche' per identificare univocamente un messaggio e' sufficiente la terna (UtenteA, UtenteB, istante ))
si le abbiamo viste ma sinceramente non mi và di stravolgere il lavoro che ho già fatto in quanto ho solo due giorni per tradurlo in schema relazionale, metterlo su MySql, inserire i dati, fare 20 query e produrre una relazione...quindi magari non è la soluzione migliore di tutte ma francamente adesso come adessomi basta che non sia clamorosamente sbagliata...già non ho la certezza di finire in tempo...se mi metto a fare modifiche strutturali sull'ER ho la certezza di non finire in tempo
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 17:54   #9
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Capisco.
A questo punto fai bene attenzione alle chiavi primarie delle tabelle e ai vincoli di unicita'.
Come dire, la tua tabella di relazione "Vende", puo' essere costruita come una tabella in cui la PK e' formata dalle PK delle entita' a cui punta (Utente, Inserzione)
mentre la tua tabella di relazione "Messaggio", NON puo' essere costruita come una tabella la cui PK e' l'insieme delle PK delle tabelle entita' a cui punta (Mittente, Destinatario, Inserzione) altrimenti vincoleresti un utente a mandare un solo messaggio per ogni inserzione.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 18:02   #10
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Capisco.
A questo punto fai bene attenzione alle chiavi primarie delle tabelle e ai vincoli di unicita'.
Come dire, la tua tabella di relazione "Vende", puo' essere costruita come una tabella in cui la PK e' formata dalle PK delle entita' a cui punta (Utente, Inserzione)
mentre la tua tabella di relazione "Messaggio", NON puo' essere costruita come una tabella la cui PK e' l'insieme delle PK delle tabelle entita' a cui punta (Mittente, Destinatario, Inserzione) altrimenti vincoleresti un utente a mandare un solo messaggio per ogni inserzione.
no lo sò, la tabella messaggio in fase di ristrutturazione avrà come chiave un campo id_messaggio e la cosa sarà motivata nella documentazione.
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 18:11   #11
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da D4rkAng3l Guarda i messaggi
no lo sò, la tabella messaggio in fase di ristrutturazione avrà come chiave un campo id_messaggio e la cosa sarà motivata nella documentazione.
Ecco, io e' questa cosa della ristrutturazione che non capisco.
Il modello ER dovrebbe essere autoesplicativo. Il progettista di DB disegna il modello ER, poi lo passa ad un operatore (che potrebbe anche essere una macchina), che senza tanta intelligenza lo trasforma in istruzioni SQL per creare il Database.
Vabbe', se cosi' vi hanno insegnato fai pure...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 18:20   #12
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Ecco, io e' questa cosa della ristrutturazione che non capisco.
Il modello ER dovrebbe essere autoesplicativo. Il progettista di DB disegna il modello ER, poi lo passa ad un operatore (che potrebbe anche essere una macchina), che senza tanta intelligenza lo trasforma in istruzioni SQL per creare il Database.
Vabbe', se cosi' vi hanno insegnato fai pure...
Beh oddio, mo non vorrei sembrare superbo perchè sono un pivellino, però sull'Atzeni c'è tutto il capitolo 8 che è dedicato alla ristrutturazione di schemi ER e da quello che dice lo schema ER è solo una visione d'insieme di cosa contiene il DB e di come queste cose sono messe in relazione tra loro....poi prima di trasformare l'ER in tabelle bisogna anzitutto fare un'analisi del carico e del costo delle operazioni quindi ristrutturarlo in base alle operazioni che vengono eseguite con più frequenza per rendere il DB più performante e anche normalizzato...poi si passa al disegno dello schema relazionale...e quest'ultimo allora potrebbe essere passato ad un'operatore che potrebbe anche essere un software che lo trasforma in SQL...
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 18:24   #13
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Come vuoi.
Magari quello che hai fatto e' una prima fase, e magari vi hanno richiseto solo quella, ma prima o poi si deve passare allo schema ER rigoroso.

P.ES. Io prendo il mio ER, disegnato cosi' com'e' e lo passo all'automa che mi genera questo.
E va gia' bene cosi' senza altri passaggi. Se ho usato bene le PK, e le FK mancano solo i campi, ma la struttura e' funzionale.

Quote:
CREATE TABLE Tempo (
Time DATE NOT NULL,
PRIMARY KEY (Time)
);


CREATE TABLE Inserzione (
PKInserzione INTEGER NOT NULL,
Scadenza DATE NULL,
PRIMARY KEY (PKInserzione),
FOREIGN KEY (Scadenza)
REFERENCES Tempo
);


CREATE TABLE Utente (
PKUtente INTEGER NOT NULL,
PRIMARY KEY (PKUtente)
);


CREATE TABLE Vendita (
PKUtente INTEGER NOT NULL,
PKInserzione INTEGER NOT NULL,
Time DATE NOT NULL,
PRIMARY KEY (PKUtente, PKInserzione, Time),
FOREIGN KEY (Time)
REFERENCES Tempo,
FOREIGN KEY (PKInserzione)
REFERENCES Inserzione,
FOREIGN KEY (PKUtente)
REFERENCES Utente
);


CREATE TABLE Vende (
PKUtente INTEGER NOT NULL,
PKInserzione INTEGER NOT NULL,
IstanteDiInserzione DATE NULL,
PRIMARY KEY (PKUtente, PKInserzione),
FOREIGN KEY (IstanteDiInserzione)
REFERENCES Tempo,
FOREIGN KEY (PKInserzione)
REFERENCES Inserzione,
FOREIGN KEY (PKUtente)
REFERENCES Utente
);


CREATE TABLE Offerta (
PKUtente INTEGER NOT NULL,
PKInserzione INTEGER NOT NULL,
Time DATE NOT NULL,
PRIMARY KEY (PKUtente, PKInserzione, Time),
FOREIGN KEY (Time)
REFERENCES Tempo,
FOREIGN KEY (PKInserzione)
REFERENCES Inserzione,
FOREIGN KEY (PKUtente)
REFERENCES Utente
);


CREATE TABLE Messaggio (
Mittente INTEGER NOT NULL,
Destinatario INTEGER NOT NULL,
Time DATE NOT NULL,
PKInserzione INTEGER NULL,
PRIMARY KEY (Mittente, Destinatario, Time),
FOREIGN KEY (PKInserzione)
REFERENCES Inserzione,
FOREIGN KEY (Time)
REFERENCES Tempo,
FOREIGN KEY (Destinatario)
REFERENCES Utente,
FOREIGN KEY (Mittente)
REFERENCES Utente
);


CREATE TABLE Commento (
PKUtente INTEGER NOT NULL,
PKInserzione INTEGER NOT NULL,
Time DATE NOT NULL,
PRIMARY KEY (PKUtente, PKInserzione, Time),
FOREIGN KEY (Time)
REFERENCES Tempo,
FOREIGN KEY (PKInserzione)
REFERENCES Inserzione,
FOREIGN KEY (PKUtente)
REFERENCES Utente
);
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 19:02   #14
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Una cosa pero' non ho capito.
Perche' dici che p.es la relazione "Feedback Acquirente" - "Inserzione" e' (1:1)
e non una (0:1)

Ovvero, se la risposta e' "Perche' penso di inserire il feedback in un secondo tempo, e quindi quando il feedback esistera' allora esistera' anche l'inserzione", allora perche' la relazione "Feedback Acquirente" - "Venditore" e' una (0:N) e non (1:N)
?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 19:13   #15
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Perchè nelle specifiche del sistema prevedo che il feedback è obbligatorio, l'acquirente una volta ricevuto il pacco e controllata la merce dovrà obbligatoriamente rilasciare il feedback al venditore.
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 19:21   #16
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da D4rkAng3l Guarda i messaggi
Perchè nelle specifiche del sistema prevedo che il feedback è obbligatorio, l'acquirente una volta ricevuto il pacco e controllata la merce dovrà obbligatoriamente rilasciare il feedback al venditore.
OK, avevo capito, ma quello che non mi convince e' che tu possa scrivere (1:1) per quella relazione. Mi sembra piu' un vincolo applicativo, mi sembra una forzatura metterla sul modello del database.
Se lasci 1:1 significa che per qualsiasi inserzione DEVE esserci un feedback, sempre. Anche per quelle non ancora vendute.
Ma e' lana caprina, non penso che il professore si impunti.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 19:36   #17
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
OK, avevo capito, ma quello che non mi convince e' che tu possa scrivere (1:1) per quella relazione. Mi sembra piu' un vincolo applicativo, mi sembra una forzatura metterla sul modello del database.
Se lasci 1:1 significa che per qualsiasi inserzione DEVE esserci un feedback, sempre. Anche per quelle non ancora vendute.
Ma e' lana caprina, non penso che il professore si impunti.
e se mettessi (0, 1) a significare che al massimo posso avere un feedback per un oggetto venduto?
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 19:44   #18
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Secondo me e' piu' giusto.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 20:28   #19
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Lo sò che a te questa cosa non garba molto però come ti ho detto non ho proprio il tempo materiale per cambiare l'impostazione del tutto...voglio solo verbalizzare qualsiasi cosa mi metta...

Allora sono in fase di passaggio da schema ER a schema relazionale normalizzato...le relazioni ternarie presenti nelmio ER nel disegno dello schema relazionale le devo lasciare come nell'ER, giusto? (ovviamente inserendo le chiavi)

Per le relazioni dei feedback la chiave sarà banalmente l'USER_ID dell'acquirente, del venditore e l'ID_OGGETTO dell'oggetto in questione.

Per i messaggi invece che posso mandarne più di uno come fare? Per te qual'è migliore tra queste due soluzioni:

1) Imposto semplicemente un ID_MESSAGGIO per ogni messaggio (usando l'auto increment), quindi ci sarà un numeretto che mi identifica ogni messaggio

2) Se usassi solo USER_ID del mittente, USER_ID del destinatario, ID_OGGETTO non basterebbe perchè potrei mandare più messaggi relativi ad un'oggetto...potrei inserire nella chiave anche la data e l'orario ma così avrei una chiave formata da 4 campi e non mi pare un gran che carino....

Per te qual'è la strategia più decente?

Grazie
Andrea
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2008, 21:13   #20
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Intendiamoci, non e' che non mi piaccia il modello.
Secondo me hai trovato entita' e relazioni corrette.

Quote:
Originariamente inviato da D4rkAng3l Guarda i messaggi
1) Imposto semplicemente un ID_MESSAGGIO per ogni messaggio (usando l'auto increment), quindi ci sarà un numeretto che mi identifica ogni messaggio
2) Se usassi solo USER_ID del mittente, USER_ID del destinatario, ID_OGGETTO non basterebbe perchè potrei mandare più messaggi relativi ad un'oggetto...potrei inserire nella chiave anche la data e l'orario ma così avrei una chiave formata da 4 campi e non mi pare un gran che carino....
Propenderi per la prima, ma non perche' 4 campi in chiave nella seconda siano troppi, ma piuttosto perche' quei 4 non sono identificative.
2 sarebbero sufficienti:
Potrei modellare il fatto che ogni oggetto non possa ricevere piu' di un messaggio nello stesso istante. (Oggetto, Data)
Oppure sempre con 2:
Ogni utente puo' spedire un solo messaggio alla volta (Mittente, Data)
Oppure con 3:
Ogni utente puo' spedire un solo messaggio alla volta, riferito ad un singolo oggetto. Puo' pero' mandare piu' messaggi contemporaneamente, purche' riferiti ad oggetti diversi. (Mittente, Data, Oggetto)
Oppure sempre con 3:
Ogni utente puo' spedire un solo messaggio alla volta, per un altro utente. Puo' pero' mandare piu' messaggi contemporaneamente, purche' ad utenti diversi. (Mittente, Data, Destinatario)

Sono tutte modellazioni fisiche valide, ma con 4 anche a me sembra eccessivo se non errato.
L'errore starebbe nel considerare la variabilita' tra oggetto e destinatario, cosa che nel tuo modello non c'e'.
Per ciascun oggetto c'e' un solo destinatario. Metterli insieme in chiave in una qualsiasi tabella che non sia quella della loro relazione diretta (vende) non ha senso.
Non appena mi dici l'oggetto, so direttamente chi lo vende, non c'e' ambiguita'. Non c'e' necessita' di metterli entrambi insieme in una qualche chiave.

Quindi, se adotti la prima soluzione avrai meno cose da spiegare o giustificare...
Speriamo al professore non venga in mente di chiederti quindi piu' spiegazioni sulla chiave del feedback, per esempio.
Penso che tu stia facendo l'errore che se hai una relazione, allora il campo deve per forza essere in chiave nella tabella figlia.
Non e' cosi'. Esistono appunto le relazioni non identificative (le linee tratteggiate).

Tanto per essere onesti: Quando avevo passato l'esame di basi di dati, io personalmente non l'avevo capito.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 16-02-2008 alle 21:24.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Snap e Perplexity unite: dal prossimo an...
La Cina dice addio a NVIDIA? Il governo ...
Microlino, simbolo italiano della mobili...
Apple disattiverà la sincronizzaz...
Google lancia l'allarme: attenzione ai m...
Primo test drive con Leapmotor B10: le c...
'Non può essere un robot': l'uman...
Monopattino elettrico Segway Ninebot Max...
Syberia Remastered è disponibile:...
Sony scopre che tutti i modelli AI hanno...
Amazon nasconde un -15% su 'Seconda Mano...
Due occasioni Apple su Amazon: iPhone 16...
Verso la fine della TV tradizionale? I g...
Cassa JBL a 39€, portatili, smartphone, ...
Cometa interstellare 3I/ATLAS: la sonda ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:04.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v