[Basi di dati] Scelta degli identificatori

EveyH
Buonasera. C'è qualche motivo per non usare le date negli identificatori?
Ad esempio, ho l'entità POST e l'entità USER. L'entità post è un messaggio in un forum inserito da un utente.
Essendo POST un'entità "debole", la cui esistenza è quindi legata strettamente all'USER (infatti eliminando un utente vanno poi cancellati tutti i suoi messaggi nel forum), mi sembra doveroso usare un identificatore esterno verso user.
Questo identificatore però dovrebbe contenere oltre all'utente anche la data ed il forum di riferimento, in modo da identificare univocamente uno specifico post ma in effetti anche così non sarebbe un identificatore idoneo: un utente potrebbe postare più messaggi nello stesso forum e nello stesso giorno.
Quindi, forse è meglio usare il classico ID autogenerato?
Aggiungo però che devo implementare un vincolo secondo cui se un utente viene eliminato vengono eliminati anche tutti i suoi post dal forum.
Grazie.

Risposte
apatriarca
Crea un identificatore univoco per il post (autogenerato o no) e inserisci l'utente come chiave esterna..

EveyH
E' in effetti quello che sto facendo.
Ma mi sapresti dire se ci sono motivi per non usare le date come parte di identificatori?
Grazie mille.

EveyH
Mi è venuto un altro dubbio atroce sugli identificatori: è possibile avere identificatori esterni che coinvolgono due tabelle diverse?
Ovvero, se ad esempio ho la tabella PUNTEGGI che ha come attributi EsitoCP, Utente, Punto, posso mettere come identificatori EsitoCP (che si riferisce all'id dell'esito inserito nella tabella ESITOCP) e Utente (che si riferisce all'Utente nella tabella ISCRIZIONE)?
Grazie.

apatriarca
Puoi avere un numero qualsiasi di chiavi esterne. Due post possono avere la stessa data di creazione. Ma non c'è nulla di sbagliato nell'usare date o tempi cine identificatori.

EveyH
"apatriarca":
Puoi avere un numero qualsiasi di chiavi esterne.


Ma anche che siano identificatori e che coinvolgano due tabelle diverse?

Grazie...

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.