Attualmente sto progettando una struttura di database per il progetto del nostro team. Ho proprio questa domanda in mente al momento: è possibile che una chiave esterna agisca come una chiave primaria su un'altra tabella?Una chiave esterna può agire come una chiave primaria?
Ecco alcune delle tabelle di progettazione di database del nostro sistema:
user_accounts
students
guidance_counselors
Quello che volevo per accadere è che la tabella user_accounts
deve contenere gli ID (presumibilmente le credenziali di accesso al sistema) e le password di entrambi gli utenti degli studenti e gli utenti dell'orientamento. In breve, le chiavi primarie della tabella students
e guidance_counselors
sono anche la chiave esterna dalla tabella user_accounts
. Ma non sono sicuro che sia permesso.
Un'altra questione è: un tavolo student_rec
esiste anche, che richiede una student_number
(che è il user_id
nella tabella user_accounts
) e una guidance_counsellor_id
(che è anche la user_id
nella user_accounts
) per ciascuno dei suoi record. Se entrambi gli ID di uno studente e un consulente di orientamento provengono dallo user_accounts table
, come dovrei progettare la tabella student_rec
? E per riferimento futuro, come posso scriverlo manualmente come codice SQL?
Questo mi ha infastidito e non riesco a trovare una risposta specifica o sicura alle mie domande.
Mentre la risposta alla tua domanda è "sì, una chiave primaria può anche fungere da chiave esterna", la mia raccomandazione sarebbe quella di evitare questo. La stessa relazione può essere espressa utilizzando chiavi primarie discrete e chiavi esterne e sovraccaricare una colonna con più responsabilità può causare difficoltà lungo la strada. Ad esempio, se la chiave primaria è anche una colonna di identità o viene assegnata automaticamente utilizzando una strategia GuidComb tramite ORM, probabilmente stai considerando due o più transazioni anziché una. Il principio della singola responsabilità è valido anche per la progettazione di database. –