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?
risposta
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.
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.
- 1. DJANGO: Come list_display un attributo di chiave esterna inversa?
- 2. chiave esterna che può essere anche pari a zero
- 3. Chiave esterna cross-database Mysql
- 4. Query dove colonna chiave esterna può essere NULL
- 5. Mappatura di una chiave primaria come chiave esterna nel database
- 6. Una chiave esterna può agire come una chiave primaria?
- 7. Dipendenza regola cercato di occultare chiave primaria in SQLAlchemy, quando vincolo di chiave esterna fa parte di composito primario chiave
- 8. È errato avere "ridondanza di chiave esterna" in un database?
- 9. Una colonna di chiave esterna può essere un Enum nel codice Entity Framework 6 prima?
- 10. differenze tra "chiave esterna" e "chiave esterna vincolo"
- 11. Chiave esterna autoreferenziale Django
- 12. Dynamics CRM 2011 SQL MetadataSchema Nome primario Attributo
- 13. vincolo di chiave esterna SailsJS
- 14. Chiave esterna per chiave composta
- 15. Chiave esterna Modello Django
- 16. JPA: annotazione chiave esterna
- 17. Relazione chiave esterna con peewee e python
- 18. Una chiave esterna può fare riferimento a più tabelle?
- 19. Chiave esterna PostgreSQL condizionale
- 20. Ordinamento lista per un attributo che può essere None
- 21. Come creare una chiave esterna in phpmyadmin
- 22. AnnotationException: un riferimento a chiave esterna ha il numero sbagliato di colonne. dovrebbe essere 2
- 23. Composito primario e cardinalità
- 24. La chiave della gamma DynamoDb può essere vuota?
- 25. Come aggiornare il valore della chiave esterna nel database mysql
- 26. Chiave primaria composta, chiave esterna. Riferimento a oggetto o chiave?
- 27. Può database relazionale essere scala orizzontale
- 28. realm/swift primario composito
- 29. Creare una chiave esterna nel browser del database SQLite
- 30. Il programma di automapper può mappare una chiave esterna a un oggetto utilizzando un repository?
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). –