[Basi di dati] Creazione tabella, PK
Ho queste due tabelle:
UTENTE(Username, Password, Tipo)
PROFILOUTENTE(Matricola, Utente, Nome, Cognome, AnnoN, LuogoN, Telefono, Foto, Corso)
Con questo vincolo di integrità:
PROFILOUTENTE.Utente -->UTENTE.Username
Nella creazione della tabella PROFILOUTENTE se metto Matricola ed Utente come Primary Key non posso modellare il fatto che ci potrebbero essere due profili utente con la stessa matricola perché una primary key è per definizione unique.
Ho un vuoto di memoria, quale altra strada posso usare, per fare in modo che Matricola ed Utente siano la chiave di PROFILO UTENTE ma lasciando la possibilità di valori uguali per Matricola?
Grazie!
UTENTE(Username, Password, Tipo)
PROFILOUTENTE(Matricola, Utente, Nome, Cognome, AnnoN, LuogoN, Telefono, Foto, Corso)
Con questo vincolo di integrità:
PROFILOUTENTE.Utente -->UTENTE.Username
Nella creazione della tabella PROFILOUTENTE se metto Matricola ed Utente come Primary Key non posso modellare il fatto che ci potrebbero essere due profili utente con la stessa matricola perché una primary key è per definizione unique.
Ho un vuoto di memoria, quale altra strada posso usare, per fare in modo che Matricola ed Utente siano la chiave di PROFILO UTENTE ma lasciando la possibilità di valori uguali per Matricola?
Grazie!
Risposte
Se è la coppia (Matricola, Utente) ad essere la primary key allora ci possono essere due matricole uguali a patto che ci siano due utenti diversi.
Ah ok grazie, non me lo ricordavo proprio
Effettivamente, a pensarci bene, se non fosse così, che senso avrebbe poter usare più di un attributo per la chiave primaria?
Approfitto per un'altra domanda: per implementare un vincolo di questo tipo: alla rimozione di un utente, in tutti gli eventi a cui ha partecipato va sostituito il nominativo con la stringa "anonimo", mi serve un trigger?
Grazie!

Approfitto per un'altra domanda: per implementare un vincolo di questo tipo: alla rimozione di un utente, in tutti gli eventi a cui ha partecipato va sostituito il nominativo con la stringa "anonimo", mi serve un trigger?
Grazie!
Sì, certo. A meno ovviamente di lasciare questo compito all'applicazione. Mi sembra tuttavia sia in questo caso meglio un trigger.
Ed in tal caso, cioè creando un trigger, cosa dovrei mettere nella clausola "ON DELETE" ?
Sì, è l'operazione che vuoi catturare.
Mi riferivo a cosa devo mettere nella clausa "ON DELETE" che inserirò nel vincolo di integrità referenziale nella tabella "figlia",
Altro dilemma: perché non riesco ad impostare una FK su un attributo (della tabella interna) che non è né chiave né unique (e non deve esserlo). Ovviamente l'attributo che sto referenziando (della tabella esterna) è una PK.
Cioè, io ho
PROFILOUTENTE(Matricola, Utente, Nome, Cognome, AnnoN, LuogoN, Telefono, Foto, Corso)
e
CORSO(Codice, Nome)
Ma non riesco a fare in modo che PROFILOUTENTE.Corso sia riferito a CORSO.Codice.
Perché?
Edit: per questa ho risolto. Per motivi che ignoro, l'attributo Corso deve essere "indicizzato".
Cioè, io ho
PROFILOUTENTE(Matricola, Utente, Nome, Cognome, AnnoN, LuogoN, Telefono, Foto, Corso)
e
CORSO(Codice, Nome)
Ma non riesco a fare in modo che PROFILOUTENTE.Corso sia riferito a CORSO.Codice.
Perché?
Edit: per questa ho risolto. Per motivi che ignoro, l'attributo Corso deve essere "indicizzato".