il est écrit dans chaque livre que les clés étrangères sont en réalité des clés primaires dans une autre table, mais pouvons-nous avoir une clé étrangère qui n'est pas la clé primaire dans une autre table
Oui, vous pouvez avoir une clé étrangère qui référence un index unique dans une autre table.
CREATE UNIQUE INDEX UX01_YourTable ON dbo.YourTable(SomeUniqueColumn)
ALTER TABLE dbo.YourChildTable
ADD CONSTRAINT FK_ChildTable_Table
FOREIGN KEY(YourFKColumn) REFERENCES dbo.YourTable(SomeUniqueColumn)
Par définition, une clé étrangère doit référencer une clé candidate d'une table. Cela ne doit pas nécessairement être la clé primaire.
En détail, la contrainte appelée FOREIGN KEY en SQL n'est pas exactement équivalente à la définition de manuel d'une clé étrangère dans le modèle relationnel. La contrainte FOREIGN KEY de SQL diffère pour les raisons suivantes:
Oui, il peut y avoir une clé étrangère qui est une clé unique dans une autre table car la clé unique est un sous-ensemble de la clé primaire mais pas la clé primaire exacte.
Il est donc possible que la clé étrangère soit une clé unique dans une autre table.
La réponse standard générale est non. Cela n'est possible que si la clé étrangère fait référence à une colonne uniquement dans une autre table. Cela signifie que la clé étrangère doit être la clé candidate dans une autre table et que la clé primaire est également une clé candidate de la table.