J'ai les trois tables suivantes :
create table "ABONNEMENT" (
"IDABONNEMENT" int not null ,
"IDABONNE" int not null ,
"IDRIB" int not null ,
primary key ("IDABONNEMENT")
);
create table "PERSONNE" (
"IDPERSONNE" int not null ,
primary key ("IDPERSONNE")
);
create table "RIB" (
"IDRIB" int not null ,
"IDPERSONNE" int not null ,
primary key ("IDRIB")
);
Avec les relations suivantes
alter table "RIB"
add constraint "FK_RIB_PERSONNE" foreign key "IDPERSONNE")
references "PERSONNE" ("IDPERSONNE")
on update cascade on delete cascade;
alter table "ABONNEMENT"
add constraint "FK_ABONNEMENT_RIB" foreign key ("IDRIB")
references "RIB" ("IDRIB")
on update cascade on delete no action;
alter table "ABONNEMENT"
add constraint "FK_ABONNEMENT_PERSONNE" foreign key ("IDABONNE")
references "PERSONNE" ("IDPERSONNE")
on update cascade on delete no action;
Lorsque j'enregistre ma dernière relation, j'ai l'erreur suivante (en
testant ce même script avec sybase je n'ai pas le pb).
table 'PERSONNE' enregistrée
table 'ABONNEMENT'
- Impossible de créer la relation 'FK_ABONNEMENT_PERSONNE'.
Erreur ODBC : [Microsoft][ODBC SQL Server Driver][SQL Server]L'introduction
d'une contrainte de clé étrangère 'FK_ABONNEMENT_PERSONNE' dans la table
'ABONNEMENT' peut provoquer des cycles ou des accès en cascade multiples.
Spécifiez ON DELETE NO ACTION ou ON UPDATE NO ACTION ou modifiez les autres
contraintes de clés étrangères
[Microsoft][ODBC SQL Server Driver][SQL Server]Impossible de créer la
contrainte. Voir les erreurs précédentes.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Patrice Scribe
Pas très familier. J'ai fait un petit test par curiosité. Apparemment cela marche si le lien entre RIB et PERSONNE est supprimé. Je pense qu'il faut comme la doc, le précise qu'il s'agisse d'une arborescence sans cycle *y compris pour les relations n'intervenant pas à priori dans la mise à jour* (ce qui n'est pas dans la doc).
En général, je préfère que la clé primaire ne soit jamais changée (quitte à utiliser une clé primaire interne à l'application et une clé "candidate" gérée par les utilisateurs).
Patrice
--
"Hervé RESCOURIO" a écrit dans le message de news:
J'ai les trois tables suivantes : create table "ABONNEMENT" ( "IDABONNEMENT" int not null , "IDABONNE" int not null , "IDRIB" int not null , primary key ("IDABONNEMENT") );
create table "PERSONNE" ( "IDPERSONNE" int not null , primary key ("IDPERSONNE") );
create table "RIB" ( "IDRIB" int not null , "IDPERSONNE" int not null , primary key ("IDRIB") );
Avec les relations suivantes alter table "RIB" add constraint "FK_RIB_PERSONNE" foreign key "IDPERSONNE") references "PERSONNE" ("IDPERSONNE") on update cascade on delete cascade;
alter table "ABONNEMENT" add constraint "FK_ABONNEMENT_RIB" foreign key ("IDRIB") references "RIB" ("IDRIB") on update cascade on delete no action;
alter table "ABONNEMENT" add constraint "FK_ABONNEMENT_PERSONNE" foreign key ("IDABONNE") references "PERSONNE" ("IDPERSONNE") on update cascade on delete no action;
Lorsque j'enregistre ma dernière relation, j'ai l'erreur suivante (en testant ce même script avec sybase je n'ai pas le pb).
table 'PERSONNE' enregistrée table 'ABONNEMENT' - Impossible de créer la relation 'FK_ABONNEMENT_PERSONNE'. Erreur ODBC : [Microsoft][ODBC SQL Server Driver][SQL
Server]L'introduction
d'une contrainte de clé étrangère 'FK_ABONNEMENT_PERSONNE' dans la table 'ABONNEMENT' peut provoquer des cycles ou des accès en cascade multiples. Spécifiez ON DELETE NO ACTION ou ON UPDATE NO ACTION ou modifiez les
autres
contraintes de clés étrangères [Microsoft][ODBC SQL Server Driver][SQL Server]Impossible de créer la contrainte. Voir les erreurs précédentes.
Merci d'avance pour vos réponses.
Pas très familier. J'ai fait un petit test par curiosité. Apparemment cela
marche si le lien entre RIB et PERSONNE est supprimé. Je pense qu'il faut
comme la doc, le précise qu'il s'agisse d'une arborescence sans cycle *y
compris pour les relations n'intervenant pas à priori dans la mise à jour*
(ce qui n'est pas dans la doc).
En général, je préfère que la clé primaire ne soit jamais changée (quitte à
utiliser une clé primaire interne à l'application et une clé "candidate"
gérée par les utilisateurs).
Patrice
--
"Hervé RESCOURIO" <hrescourio@s.com> a écrit dans le message de
news:eIfLQv2gDHA.3272@tk2msftngp13.phx.gbl...
J'ai les trois tables suivantes :
create table "ABONNEMENT" (
"IDABONNEMENT" int not null ,
"IDABONNE" int not null ,
"IDRIB" int not null ,
primary key ("IDABONNEMENT")
);
create table "PERSONNE" (
"IDPERSONNE" int not null ,
primary key ("IDPERSONNE")
);
create table "RIB" (
"IDRIB" int not null ,
"IDPERSONNE" int not null ,
primary key ("IDRIB")
);
Avec les relations suivantes
alter table "RIB"
add constraint "FK_RIB_PERSONNE" foreign key "IDPERSONNE")
references "PERSONNE" ("IDPERSONNE")
on update cascade on delete cascade;
alter table "ABONNEMENT"
add constraint "FK_ABONNEMENT_RIB" foreign key ("IDRIB")
references "RIB" ("IDRIB")
on update cascade on delete no action;
alter table "ABONNEMENT"
add constraint "FK_ABONNEMENT_PERSONNE" foreign key ("IDABONNE")
references "PERSONNE" ("IDPERSONNE")
on update cascade on delete no action;
Lorsque j'enregistre ma dernière relation, j'ai l'erreur suivante (en
testant ce même script avec sybase je n'ai pas le pb).
table 'PERSONNE' enregistrée
table 'ABONNEMENT'
- Impossible de créer la relation 'FK_ABONNEMENT_PERSONNE'.
Erreur ODBC : [Microsoft][ODBC SQL Server Driver][SQL
Server]L'introduction
d'une contrainte de clé étrangère 'FK_ABONNEMENT_PERSONNE' dans la table
'ABONNEMENT' peut provoquer des cycles ou des accès en cascade multiples.
Spécifiez ON DELETE NO ACTION ou ON UPDATE NO ACTION ou modifiez les
autres
contraintes de clés étrangères
[Microsoft][ODBC SQL Server Driver][SQL Server]Impossible de créer la
contrainte. Voir les erreurs précédentes.
Pas très familier. J'ai fait un petit test par curiosité. Apparemment cela marche si le lien entre RIB et PERSONNE est supprimé. Je pense qu'il faut comme la doc, le précise qu'il s'agisse d'une arborescence sans cycle *y compris pour les relations n'intervenant pas à priori dans la mise à jour* (ce qui n'est pas dans la doc).
En général, je préfère que la clé primaire ne soit jamais changée (quitte à utiliser une clé primaire interne à l'application et une clé "candidate" gérée par les utilisateurs).
Patrice
--
"Hervé RESCOURIO" a écrit dans le message de news:
J'ai les trois tables suivantes : create table "ABONNEMENT" ( "IDABONNEMENT" int not null , "IDABONNE" int not null , "IDRIB" int not null , primary key ("IDABONNEMENT") );
create table "PERSONNE" ( "IDPERSONNE" int not null , primary key ("IDPERSONNE") );
create table "RIB" ( "IDRIB" int not null , "IDPERSONNE" int not null , primary key ("IDRIB") );
Avec les relations suivantes alter table "RIB" add constraint "FK_RIB_PERSONNE" foreign key "IDPERSONNE") references "PERSONNE" ("IDPERSONNE") on update cascade on delete cascade;
alter table "ABONNEMENT" add constraint "FK_ABONNEMENT_RIB" foreign key ("IDRIB") references "RIB" ("IDRIB") on update cascade on delete no action;
alter table "ABONNEMENT" add constraint "FK_ABONNEMENT_PERSONNE" foreign key ("IDABONNE") references "PERSONNE" ("IDPERSONNE") on update cascade on delete no action;
Lorsque j'enregistre ma dernière relation, j'ai l'erreur suivante (en testant ce même script avec sybase je n'ai pas le pb).
table 'PERSONNE' enregistrée table 'ABONNEMENT' - Impossible de créer la relation 'FK_ABONNEMENT_PERSONNE'. Erreur ODBC : [Microsoft][ODBC SQL Server Driver][SQL
Server]L'introduction
d'une contrainte de clé étrangère 'FK_ABONNEMENT_PERSONNE' dans la table 'ABONNEMENT' peut provoquer des cycles ou des accès en cascade multiples. Spécifiez ON DELETE NO ACTION ou ON UPDATE NO ACTION ou modifiez les
autres
contraintes de clés étrangères [Microsoft][ODBC SQL Server Driver][SQL Server]Impossible de créer la contrainte. Voir les erreurs précédentes.
Merci d'avance pour vos réponses.
bruno reiter [MVP]
j'avais répondu ce matin, mais il semble qu'il y ait un peu le b... sur les NG :
Ton dessin de base (en tout cas son implémentation) est incorrect, tu pourrais avoir avec tes contraintes:
perso code 1 2
RIB code perso 1 1 2 1 3 1
Abonn Code perso RIB 1 1 1 2 2 2 3 3 2
Or c'est faux, et tes cascades seraient fausses
BR
"Hervé RESCOURIO" wrote in message news:
J'ai les trois tables suivantes : create table "ABONNEMENT" ( "IDABONNEMENT" int not null , "IDABONNE" int not null , "IDRIB" int not null , primary key ("IDABONNEMENT") );
create table "PERSONNE" ( "IDPERSONNE" int not null , primary key ("IDPERSONNE") );
create table "RIB" ( "IDRIB" int not null , "IDPERSONNE" int not null , primary key ("IDRIB") );
Avec les relations suivantes alter table "RIB" add constraint "FK_RIB_PERSONNE" foreign key "IDPERSONNE") references "PERSONNE" ("IDPERSONNE") on update cascade on delete cascade;
alter table "ABONNEMENT" add constraint "FK_ABONNEMENT_RIB" foreign key ("IDRIB") references "RIB" ("IDRIB") on update cascade on delete no action;
alter table "ABONNEMENT" add constraint "FK_ABONNEMENT_PERSONNE" foreign key ("IDABONNE") references "PERSONNE" ("IDPERSONNE") on update cascade on delete no action;
Lorsque j'enregistre ma dernière relation, j'ai l'erreur suivante (en testant ce même script avec sybase je n'ai pas le pb).
table 'PERSONNE' enregistrée table 'ABONNEMENT' - Impossible de créer la relation 'FK_ABONNEMENT_PERSONNE'. Erreur ODBC : [Microsoft][ODBC SQL Server Driver][SQL Server]L'introduction d'une contrainte de clé étrangère 'FK_ABONNEMENT_PERSONNE' dans la table 'ABONNEMENT' peut provoquer des cycles ou des accès en cascade multiples. Spécifiez ON DELETE NO ACTION ou ON UPDATE NO ACTION ou modifiez les autres contraintes de clés étrangères [Microsoft][ODBC SQL Server Driver][SQL Server]Impossible de créer la contrainte. Voir les erreurs précédentes.
Merci d'avance pour vos réponses.
j'avais répondu ce matin, mais il semble qu'il y ait un peu le b... sur les NG :
Ton dessin de base (en tout cas son implémentation) est incorrect, tu pourrais
avoir avec tes contraintes:
perso
code
1
2
RIB
code perso
1 1
2 1
3 1
Abonn
Code perso RIB
1 1 1
2 2 2
3 3 2
Or c'est faux, et tes cascades seraient fausses
BR
"Hervé RESCOURIO" <hrescourio@s.com> wrote in message
news:eIfLQv2gDHA.3272@tk2msftngp13.phx.gbl...
J'ai les trois tables suivantes :
create table "ABONNEMENT" (
"IDABONNEMENT" int not null ,
"IDABONNE" int not null ,
"IDRIB" int not null ,
primary key ("IDABONNEMENT")
);
create table "PERSONNE" (
"IDPERSONNE" int not null ,
primary key ("IDPERSONNE")
);
create table "RIB" (
"IDRIB" int not null ,
"IDPERSONNE" int not null ,
primary key ("IDRIB")
);
Avec les relations suivantes
alter table "RIB"
add constraint "FK_RIB_PERSONNE" foreign key "IDPERSONNE")
references "PERSONNE" ("IDPERSONNE")
on update cascade on delete cascade;
alter table "ABONNEMENT"
add constraint "FK_ABONNEMENT_RIB" foreign key ("IDRIB")
references "RIB" ("IDRIB")
on update cascade on delete no action;
alter table "ABONNEMENT"
add constraint "FK_ABONNEMENT_PERSONNE" foreign key ("IDABONNE")
references "PERSONNE" ("IDPERSONNE")
on update cascade on delete no action;
Lorsque j'enregistre ma dernière relation, j'ai l'erreur suivante (en
testant ce même script avec sybase je n'ai pas le pb).
table 'PERSONNE' enregistrée
table 'ABONNEMENT'
- Impossible de créer la relation 'FK_ABONNEMENT_PERSONNE'.
Erreur ODBC : [Microsoft][ODBC SQL Server Driver][SQL Server]L'introduction
d'une contrainte de clé étrangère 'FK_ABONNEMENT_PERSONNE' dans la table
'ABONNEMENT' peut provoquer des cycles ou des accès en cascade multiples.
Spécifiez ON DELETE NO ACTION ou ON UPDATE NO ACTION ou modifiez les autres
contraintes de clés étrangères
[Microsoft][ODBC SQL Server Driver][SQL Server]Impossible de créer la
contrainte. Voir les erreurs précédentes.
j'avais répondu ce matin, mais il semble qu'il y ait un peu le b... sur les NG :
Ton dessin de base (en tout cas son implémentation) est incorrect, tu pourrais avoir avec tes contraintes:
perso code 1 2
RIB code perso 1 1 2 1 3 1
Abonn Code perso RIB 1 1 1 2 2 2 3 3 2
Or c'est faux, et tes cascades seraient fausses
BR
"Hervé RESCOURIO" wrote in message news:
J'ai les trois tables suivantes : create table "ABONNEMENT" ( "IDABONNEMENT" int not null , "IDABONNE" int not null , "IDRIB" int not null , primary key ("IDABONNEMENT") );
create table "PERSONNE" ( "IDPERSONNE" int not null , primary key ("IDPERSONNE") );
create table "RIB" ( "IDRIB" int not null , "IDPERSONNE" int not null , primary key ("IDRIB") );
Avec les relations suivantes alter table "RIB" add constraint "FK_RIB_PERSONNE" foreign key "IDPERSONNE") references "PERSONNE" ("IDPERSONNE") on update cascade on delete cascade;
alter table "ABONNEMENT" add constraint "FK_ABONNEMENT_RIB" foreign key ("IDRIB") references "RIB" ("IDRIB") on update cascade on delete no action;
alter table "ABONNEMENT" add constraint "FK_ABONNEMENT_PERSONNE" foreign key ("IDABONNE") references "PERSONNE" ("IDPERSONNE") on update cascade on delete no action;
Lorsque j'enregistre ma dernière relation, j'ai l'erreur suivante (en testant ce même script avec sybase je n'ai pas le pb).
table 'PERSONNE' enregistrée table 'ABONNEMENT' - Impossible de créer la relation 'FK_ABONNEMENT_PERSONNE'. Erreur ODBC : [Microsoft][ODBC SQL Server Driver][SQL Server]L'introduction d'une contrainte de clé étrangère 'FK_ABONNEMENT_PERSONNE' dans la table 'ABONNEMENT' peut provoquer des cycles ou des accès en cascade multiples. Spécifiez ON DELETE NO ACTION ou ON UPDATE NO ACTION ou modifiez les autres contraintes de clés étrangères [Microsoft][ODBC SQL Server Driver][SQL Server]Impossible de créer la contrainte. Voir les erreurs précédentes.