La clé primaire de la table Person est vraisemblablement une identité. Il s'agit d'un champ entier auto-incrémenté.
Vous devez créer la clé étrangère dans la table d'adresses de type int, pas d'identité. Il contiendra des entiers qui correspondent aux enregistrements Person, mais vous ne voulez pas que la clé étrangère s'incrémente automatiquement. Pour chaque enregistrement de la table enfant (adresse), vous définirez une valeur spécifique pour la clé étrangère indiquant à quel enregistrement parent (Personne) elle appartient.
Exemple :
INSERT person (firstname, lastname) VALUES ('John', 'Smith')
Cela insérera le nouvel enregistrement de personne et le champ personid
sera rempli automatiquement car il s'agit d'un champ IDENTITY.
Maintenant, pour insérer une adresse de John Smith, vous devez connaître son personid
. Par exemple :
-- Say, for example, personid of John Smith is 55
INSERT address (personid, street, city) VALUES (55, 'High Street', 'London')
Donc dans la person
table le personid est généré automatiquement mais dans l'address
table, vous spécifiez la valeur qui correspond à une personne existante. C'est tout l'intérêt d'une clé étrangère.
Sans plus d'informations sur votre schéma, il est difficile de deviner le problème.