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.
Je pense que c'est une option qui me bloque dans SQL Server Entreprise.
Merci d'avance pour vos réponses.
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
Fred BROUARD
Le problème vient du fait que tu fait une référence circulaire entre les tables. Soit il faut mettre un des colonnes en référence en NULL possible, soit il te faut des contraintes NO ACTION, soit il te faut la déférabilité des contraintes qui n'est hélas pas implémentée sous SQL Server.
A lire : http://sqlpro.developpez.com/SQL_AZ_7b.html#SCHEMA73
A +
Hervé RESCOURIO a écrit:
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.
Je pense que c'est une option qui me bloque dans SQL Server Entreprise. Merci d'avance pour vos réponses.
-- Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************
Le problème vient du fait que tu fait une référence circulaire entre les
tables.
Soit il faut mettre un des colonnes en référence en NULL possible, soit
il te faut des contraintes NO ACTION, soit il te faut la déférabilité
des contraintes qui n'est hélas pas implémentée sous SQL Server.
A lire :
http://sqlpro.developpez.com/SQL_AZ_7b.html#SCHEMA73
A +
Hervé RESCOURIO a écrit:
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.
Je pense que c'est une option qui me bloque dans SQL Server Entreprise.
Merci d'avance pour vos réponses.
--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto:brouardf@club-internet.fr ******************
Le problème vient du fait que tu fait une référence circulaire entre les tables. Soit il faut mettre un des colonnes en référence en NULL possible, soit il te faut des contraintes NO ACTION, soit il te faut la déférabilité des contraintes qui n'est hélas pas implémentée sous SQL Server.
A lire : http://sqlpro.developpez.com/SQL_AZ_7b.html#SCHEMA73
A +
Hervé RESCOURIO a écrit:
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.
Je pense que c'est une option qui me bloque dans SQL Server Entreprise. Merci d'avance pour vos réponses.
-- Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************