2011-04-16 4 views
1

J'ai un schéma de base de données avec des lignes de données de versionnement, par ex. Table Person a les colonnesContraintes de clé étrangère dans SQL Server

id (int, PK) 
name (String) 
current (Bool) 
firstid (int) 

Current est 0 pour les données antérieures, 1 pour la dernière entrée. Toutes les lignes d'une même entité ont le même FirstID, ce qui indique le premier ID de l'ensemble.

table de référence: Adress avec le même principe:

id (int, PK) 
street (String) 
person_id (int) 
current (Bool) 
firstid (int) 

Person_id des points à patient.firstid. Alors firstid est jamais unique que si current=1

Mon problème est: Je voudrais ajouter l'intégrité référentielle à mes tables, mais cela ne fonctionne que si la colonne référencée (patient.firstid) est unique ...

Répondre

1

Vous devrait envisager de refactoriser la structure de votre table. Mais pour rester dans la structure actuelle, ajouter une clé étrangère auto-référencement à personne

références firstid personne (id)

Ensuite, faire référence à la « personne de base » de la table d'adresses

address.person_id références personne (id) - qui doit seulement stocker un lien vers le premier identifiant

0

une contrainte FOREIGN KEY ne pas à être liée uniquement à une contrainte de clé primaire dans une autre table; il peut également être défini pour référencer les colonnes d'une contrainte UNIQUE dans une autre table. Une contrainte FOREIGN KEY peut contenir des valeurs nulles; Toutefois, si une colonne d'une contrainte FOREIGN KEY composite contient des valeurs null , la vérification de la contrainte FOREIGN KEY sera ignorée.

Les données de deux tables connexes peuvent être combinés, même si aucune contrainte de clé primaire ou étrangers sont définis entre les tables, mais une relation clé étrangère entre deux tables indique que les deux tables ont été optimisés pour être combinés dans un requête qui utilise les clés comme critères.

référence http://msdn.microsoft.com/en-us/library/aa933117(v=sql.80).aspx

Questions connexes