|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Henri Architecte de base de données Inscription : décembre 2012 Messages : 7 ![]() |
Bonjour,
Je cherche à mettre en place une clé étrangère dans une table. J'ai en effet trois tables liées - individu_activite (KeyInd (PK, int, non null), KeyAct (PK, varchar(8), non null), KeyStr (PK, char(10), non null)) - individu (KeyInd(PK, int, non null )) - activite (KeyAct (PK, varchar(8), non null), KeyStr (PK, char(10), non null)) individu_activite à une FK originaire de la table individu sur la colonne KeyInd et je souhaiterais rajouter une FK originaire de la table activité sur les colonnes KeyAct et KeyStr Malheureusement j'obtiens le message suivant "les colonnes de la table activite ne correspondent pas à une clé primaire ou à une contrainte UNIQUE". C'est pourtant bien le cas. J'ai vraiment besoin des lumières d'un expert. En vous remerciant par avance. Cordialement |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() ![]() David BARBARINInscription : août 2005 Messages : 4 137 ![]() |
Tu peux nous fournir les DDL de tes tables + index ?
++ |
|
00
|
|
|
#3 |
|
Invité de passage
![]() Henri Architecte de base de données Inscription : décembre 2012 Messages : 7 ![]() |
Bonsoir,
Il n'y a aucun déclencheur DDL et la requête : select * from sys.triggers ne retourne aucun résultat Les index des tables concernées ne sont pour l'instant que sur les PK. En espérant que cette réponse te donne une idée car c'est très obscure pour moi ce problème. Pour information et dans le doute j'ai fait un truncate sur les tables et retenter la création de la FK mais rien de probant. Ce n'était donc pas lié aux données non-plus. Cordialement |
|
|
00
|
|
|
#4 |
![]() ![]() |
DDL = Data Definition Language, c'est le script qui permet de créer vos tables (CREATE TABLE, CREATE INDEX).
Aucune relation directe avec les déclencheurs. Vous pouvez le récupérer en sélectionnant vos tables dans SSMS, et clic droit générer un script, CREATE.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#5 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
Citation:
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
|
00
|
|
|
#6 | ||
|
Invité de passage
![]() Henri Architecte de base de données Inscription : décembre 2012 Messages : 7 ![]() |
Bonjours à vous deux,
Mr Brouard : Non, je confirme qu'il n'y a pas de confusion, mais que dans la table activité la clé primaire est composée des deux colonnes (KeyAct et KeyStr). Mr Waldar : mille excuses interpréter un peu vite la question, le voici. Code :
|
||
|
|
00
|
|
|
#7 | ||||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 1 690 ![]() |
Bonjour,
Vous devez respecter l'ordre des colonnes dans votre script de définition de clef étrangère. C'est à dire indiquer Code :
Code :
Cependant, vous avez un problème de modélisation. Que se passera-t-il quand une activité changera de structure ? la clef primaire de l'activité changera également... Votre table individu_activite mériterait une vraie clef primaire en entier autoincrémenté. ça vous aurait évité le présent souci, et ça vous en éviterait bien d'autres à l'avenir... |
||||
|
|
00
|
|
|
#8 | ||
|
Invité de passage
![]() Henri Architecte de base de données Inscription : décembre 2012 Messages : 7 ![]() |
Bonjour et merci,
Citation:
Citation:
|
||
|
|
00
|
|
|
#9 | |||
|
Invité de passage
![]() Henri Architecte de base de données Inscription : décembre 2012 Messages : 7 ![]() |
Sur la remarque 1 de aieeeuuuuu j'ai vérifié l'ordre des colonnes dans la requête était bon et j'ai donc toujours l'erreur :
Code :
Citation:
|
|||
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 1 690 ![]() |
Ce n'est plus la même erreur, là il vous dit que vous ne pouvez pas poser la contrainte, car vous avez un problème d’intégrité dans vos données.
que vous retourne Code :
|
||
|
|
20
|
|
|
#11 |
|
Invité de passage
![]() Henri Architecte de base de données Inscription : décembre 2012 Messages : 7 ![]() |
Super! et merci aieeeuuuuu pour cette belle analyse.
C'était bien un problème d'intégrité de données. Je me concentrais bêtement sur la pertinence des données de la table Activite alors que le problème venait de la table Individu_activite qui contenait des erreurs sur la colonne ida_KeyStr. En effet pour la valeur 10 dans la colonne Activite.act_KeyStr, j'avais 010 dans la colonne Individu_Activite.ida_KeyStr. C'est ballot et je vous remercie tous beaucoup pour cette assistance rapide. ![]() Bonne journée |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com