2012-02-11 11 views
5

Ho 2 tabelle, User e Employee. A ogni utente viene assegnato un User_ID e quella è una chiave primaria nella tabella User e una chiave esterna nella tabella Employee. Questo attributo nella tabella Employee può essere anche una chiave primaria?Un attributo di database può essere primario e chiave esterna?

+0

Qual è la chiave primaria nella tabella Dipendente? È consentita una sola chiave primaria in ogni tabella. È possibile eseguire una chiave primaria composita (più di una colonna). –

risposta

20

Se si dispone di una relazione uno a uno tra due tabelle, anche la chiave primaria della tabella dei dettagli è una chiave esterna.

master   detail (1 : 1) 
+----------+ 1:1 +-------------+ 
| PK id |<---o| PK FK id | 
+----------+  +-------------+ 
|  col1 |  |  col1 | 
|  col2 |  |  col2 | 
|  etc. |  |  etc. | 
+----------+  +-------------+ 

Se ha un rapporto m-to-n, la tabella di collegamento ha le colonne relative ai due chiavi primarie della m ed n-tabelle. Queste colonne sono chiavi primarie e chiavi esterne allo stesso tempo.

    m : n 
m_table   junction 
+----------+ 1:m +------------+  n_table 
| PK id1 |<---o| PK FK1 id1 | n:1 +----------+ 
+----------+  | PK FK2 id2 |o--->| PK id2 | 
|  col1 |  +------------+  +----------+ 
|  col2 |  |   |  |  col1 | 
|  etc. |  +------------+  |  etc. | 
+----------+      +----------+ 

noti che con questa costruzione, un record di una tabella può essere collegato a uno specifico record dell'altra tabella volta, poiché ogni chiave primaria composita della tabella di collegamento deve essere univoco. Se si desidera consentire abbinamenti non univoci, definire una chiave separata primaria nella tabella bivio:

    m : n 
        junction 
       +---------+ 
m_table   | PK id | 
+----------+ 1:m +---------+  n_table 
| PK id1 |<---o| FK1 id1 | n:1 +----------+ 
+----------+  | FK2 id2 |o--->| PK id2 | 
|  col1 |  |   |  +----------+ 
|  col2 |  +---------+  |  col1 | 
|  etc. |      |  etc. | 
+----------+      +----------+ 

In questo caso, la chiave primaria e vincoli di chiave esterna sono impostate su colonne diverse. In alternativa puoi anche costruire la chiave primaria con le due chiavi esterne più un numeratore o un altro attributo discernente.


Nel tuo caso, se v'è un uno-a-uno o uno-a-zero-o-one rapporto tra User e Employee, allora sì, la User_ID nella tabella Employee può essere chiave esterna (FK) e chiave primaria (PK) allo stesso tempo. A parole, ciò significherebbe: un utente può essere anche un dipendente, nel qual caso i dati dei dipendenti saranno allegati all'utente. Se non è un dipendente (potrebbe essere un esperto esterno), nessun record del dipendente è allegato. Se User_ID è FK e PK in Employee, ciascun utente può avere al massimo un record di dipendente collegato. Se User_ID era solo FK ma non PK nella tabella Employee, un utente potrebbe avere diversi record relativi dipendenti.

2

Sì. Lo farebbe ad esempio se volessi far rispettare che tutti i dipendenti sono utenti e alcuni utenti possono essere impiegati. Questo sarebbe (zero o uno) in una relazione.

Altrimenti, normalmente non si ha la chiave primaria uguale alla chiave esterna, sebbene possa contenere chiavi esterne, come nel caso di una tabella di giunzione per una relazione molti a molti.

Problemi correlati