è scritto in ogni libro che le chiavi esterne sono in realtà chiave primaria in qualche altra tabella ma possiamo avere una chiave esterna che non è chiave primaria in qualsiasi altra tabellapossiamo avere una chiave esterna che non è una chiave primaria in nessun'altra tabella?
risposta
Sì - è possibile avere una chiave esterna che fa riferimento a una indice univoco in un'altra tabella.
Questo è corretto in Microsoft SQL Server ma non è SQL stanard e non è supportato da tutti gli altri DBMS. In SQL standard ISO non esiste un indice e sono sempre necessari vincoli FOREIGN KEY per abbinare vincoli UNIQUE o PRIMARY KEY. Personalmente preferirei sempre utilizzare vincoli univoci piuttosto che indici univoci senza vincoli. Penso che un vincolo renda più chiaro il significato previsto e che la sintassi del vincolo sia più facilmente comprensibile da un altro sviluppatore di database. – sqlvogel
@David: sì, ma l'OP chiedeva di SQL Server ..... –
Per definizione una chiave esterna deve fare riferimento a una chiave candidata di una tabella. Non deve necessariamente essere la chiave primaria.
Per motivi di dettaglio, il vincolo denominato FOREIGN KEY in SQL non è esattamente equivalente alla definizione da libro di testo di una chiave esterna nel modello relazionale. Vincolo FOREIGN KEY di SQL differisce perché:
- può riferire qualsiasi insieme di colonne soggetti ad un vincolo di unicità, anche se non sono chiavi candidate (superchiavi o colonne annullabili per esempio).
- può includere null, nel qual caso il vincolo non viene applicato
- sua sintassi dipende ordine della colonna, quindi un vincolo fk su (A, B) riferimento (A, B) è diverso da un vincolo (B , A) referenziamento (A, B).
APC non è sicuro del motivo per cui si desidera modificarlo per sostituire "SQL" con "SQL Server". I miei commenti si applicano a SQL (ovvero al linguaggio standard definito da ISO). Si applicano a tutte le implementazioni di SQL che conosco, non solo a SQL Server. – sqlvogel
Sì, cos'è con queste persone che modificano i post senza sapere cosa stanno facendo. Io voto per non consentire modifiche a Risposte. – PerformanceDBA
Sì, può esserci una chiave esterna che è una chiave univoca in un'altra tabella poiché la chiave Univoca è una sottoserie di chiave primaria ma non la chiave primaria esatta.
Quindi è possibile che la chiave esterna sia una chiave univoca in un'altra tabella.
La risposta standard standard è no. È possibile solo se la chiave esterna fa riferimento a una colonna in modo univoco in un'altra tabella. Ciò significa che la chiave esterna deve essere la chiave candidata in un'altra tabella e la chiave primaria è anche una chiave candidata alla tabella.
- 1. Una chiave esterna può agire come una chiave primaria?
- 2. Mappatura di una chiave primaria come chiave esterna nel database
- 3. chiave esterna cakephp non la chiave primaria
- 4. SQL Tabella chiave esterna che fa parte di una chiave primaria composita
- 5. Che cos'è esattamente una chiave esterna?
- 6. tabella non dispone di una chiave primaria
- 7. Hibernate chiave esterna con una parte della chiave primaria composita
- 8. GROUP BY chiave esterna o chiave primaria?
- 9. chiave esterna che fa riferimento una chiave primaria 2 colonne in SQL Server
- 10. Perché non è opportuno avere una chiave primaria su una tabella di join?
- 11. Possiamo avere una tabella senza chiave primaria nel framework di entità?
- 12. Come creare una chiave esterna in phpmyadmin
- 13. Perché creare un vincolo di chiave esterna che fa riferimento alla chiave primaria della stessa tabella dal campo chiave primaria
- 14. Chiave primaria e esterna allo stesso tempo
- 15. Chiave primaria composta, chiave esterna. Riferimento a oggetto o chiave?
- 16. Come aggiungere un'associazione EF6 a una chiave candidata/chiave univoca che non è la chiave primaria?
- 17. SQL aggiorna una tabella con una chiave esterna
- 18. Come possiamo rinominare la chiave primaria di una tabella in fluent-migrator?
- 19. Mappatura una chiave esterna per qualcosa di diverso da una chiave primaria
- 20. Imposta la colonna come chiave primaria se la tabella non ha una chiave primaria
- 21. Una chiave primaria è automaticamente un indice?
- 22. chiave esterna che fa riferimento una vista in Oracle
- 23. SQL Server 2008: trovare la chiave primaria/esterna nella tabella?
- 24. cassandra, selezionare tramite una chiave non primaria
- 25. La tabella/vista non ha una chiave primaria definita
- 26. Come si aggiorna una tabella con una chiave esterna a un'altra tabella in ADO.Net Entity Model?
- 27. come aggiungere una chiave primaria a una tabella nei binari
- 28. Hibernate chiave esterna come parte della chiave primaria
- 29. È necessario creare una chiave esterna durante la creazione di una tabella su Rails?
- 30. Modifica chiave primaria MySQL quando vincoli di chiave esterna esiste
Perché vuoi? – JeffO
non c'è una ragione specifica qualcuno mi ha chiesto questo e mi sono confuso questo è il motivo per cui volevo solo sapere che è – Mac
Perché? Beh, questo dipende da quali sono le tue ragioni per scegliere una chiave primaria in primo luogo - formalmente parlando non c'è una ragione assoluta per scegliere una chiave primaria rispetto ad un'altra quindi non ci sono motivi particolari per dire perché sarebbe o non sarebbe lo stesso uno usato per riferimenti di chiavi straniere. Inoltre, è potenzialmente consigliabile in alcuni casi utilizzare più di una chiave candidata per tabella come riferimento di chiave esterna. In tal caso, uno di quei riferimenti ovviamente non è la chiave primaria - a meno che tu non voglia chiamare più di una chiave quella "primaria"! – sqlvogel