IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Pb avec ON DELETE/UPDATE CASCADE


Sujet :

MS SQL Server

  1. #1
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut Pb avec ON DELETE/UPDATE CASCADE
    salut à tous,
    j'ai une base de donnée avec 4 tables (qui sont plus bas) et j'ai un problème lorsque je veux faire des ON DELETE CASCADE et ON UPDATE CASCADE sur 2 de mes champ. Voilà les tables (en gros):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    /* ---TABLE : T_AR_AREA------------------------------------------------------ */
     
    CREATE TABLE [T_AR_AREA] (
    	[AR_ID] [int] IDENTITY (1, 1) NOT NULL ,
    	[LA_ID] [int] NOT NULL ,
    	[AR_ID_PARENT] [int] NULL ,
    	[AR_CENTER] [float] NULL ,
    ) ON [PRIMARY]
     
    ALTER TABLE [T_AR_AREA] WITH NOCHECK ADD CONSTRAINT [PK_T_AR_AREA_1__52] PRIMARY KEY  NONCLUSTERED ([AR_ID])  ON [PRIMARY] 
     
    /* ---TABLE : T_LA_LAYER----------------------------------------------------- */
     
    CREATE TABLE [T_LA_LAYER] (
    	[LA_ID] [int] IDENTITY (1, 1) NOT NULL ,
    	[LA_NAME] [varchar] (255) COLLATE French_CI_AS NULL ,
    ) ON [PRIMARY]
     
    ALTER TABLE [T_LA_LAYER] WITH NOCHECK ADD CONSTRAINT [PK_T_LA_LAYER_1__52] PRIMARY KEY  NONCLUSTERED([LA_ID])  ON [PRIMARY] 
     
    /* ---TABLE : T_AT_ATTRIBUTE------------------------------------------------- */
     
    CREATE TABLE [T_AT_ATTRIBUTE] (
    	[AT_ID] [int] IDENTITY (1, 1) NOT NULL ,
    	[LA_ID] [int] NOT NULL,
    	[AT_NAME] [varchar] (255) COLLATE French_CI_AS NULL ,
    	[AT_TYPE] [varchar] (255) COLLATE French_CI_AS NULL ,
    ) ON [PRIMARY]
     
    ALTER TABLE [T_AT_ATTRIBUTE] WITH NOCHECK ADD CONSTRAINT [PK_T_AT_ATTRIBUTE_1__52] PRIMARY KEY  NONCLUSTERED ([AT_ID])  ON [PRIMARY] 
     
    /* ---TABLE : T_AL_ATTRIBUTES_LIST------------------------------------------- */
     
    CREATE TABLE [T_AL_ATTRIBUTES_LIST] (
    	[AT_ID] [int] NOT NULL ,
    	[AR_ID] [int] NOT NULL ,
    	[AL_VALUE] [varchar] (255) COLLATE French_CI_AS NULL ,
    )
     
    /* ---ADD FOREIGN KEYS------------------------------------------------------- */
     
    /* -------TABLE [T_AT_ATTRIBUTE]--------------------------------------------- */
     
    ALTER TABLE [T_AT_ATTRIBUTE] ADD FOREIGN KEY ([LA_ID]) REFERENCES [T_LA_LAYER] ([LA_ID]) ON DELETE CASCADE ON UPDATE CASCADE 
     
    /* -------TABLE [T_AR_AREA]-------------------------------------------------- */
     
    ALTER TABLE [T_AR_AREA] ADD FOREIGN KEY ([LA_ID]) REFERENCES [T_LA_LAYER] ([LA_ID]) ON DELETE CASCADE ON UPDATE CASCADE 
     
    ALTER TABLE [T_AR_AREA] ADD FOREIGN KEY ([AR_ID_PARENT]) REFERENCES [T_AR_AREA] ([AR_ID])
     
    /* -------TABLE [T_AL_ATTRIBUTES_LIST]--------------------------------------- */
     
    ALTER TABLE [T_AL_ATTRIBUTES_LIST] ADD FOREIGN KEY ([AT_ID]) REFERENCES [T_AT_ATTRIBUTE] ([AT_ID]) ON DELETE CASCADE ON UPDATE CASCADE 
     
    ALTER TABLE [T_AL_ATTRIBUTES_LIST] ADD FOREIGN KEY ([AR_ID]) REFERENCES [T_AR_AREA] ([AR_ID])
    le problème c'est que si je rajoute ON DELETE CASCADE ON UPDATE CASCADE à AR_ID_PARENT ou à la seconde déclaration de clé étrangère de la table T_AL_ATTRIBUTES_LIST (c'est selon l'ordre dans lequel je les place) j'ai cet erreur :
    L'introduction d'une contrainte de clé étrangère 'FK__T_AL_ATTR__AR_ID__07F6335A' dans la table 'T_AL_ATTRIBUTES_LIST' 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
    Je ne vois vraiment pas d'où provient l'erreur sachant que toutes les autres déclaration de ON DELETE CASCADE ON UPDATE CASCADE fonctionne.
    Merci d'avance à tous ceux prêteront attention à ce sujet

  2. #2
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Points : 358
    Points
    358
    Par défaut
    Cette erreur survient lorsque tes rélations forment un cycle.

    Par exemple A est fils de B; B est fils de C et A et C en rélation.

    Donc il faudrait modifier une des rélations

  3. #3
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    C'est ce à quoi je pensais ouai, mais comment faire parce que le truc c'est que ma base est très bien comme elle est, je ne peux pas la modifier deplus le problème que tu me dis n'est pas celui que j'ai puisque moi j'ai A fils de B, A fils de C et je veux que quand je supprime A ou C, la ligne qui corresponde dans B soit supprimé aussi.

  4. #4
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Points : 358
    Points
    358
    Par défaut
    A bien regarder tes rélations on voit que les 4 tables forment des cycles.

    Je crois que le problème vient du fait que ta Base de données n'est pas normalisée.
    Il vaut mieux faire une recherche de ce côté et voir comment normaliser ta base de données.


    Merci

  5. #5
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Pour un problème de performances,
    Il n'est pas recomander d'utiliser les option ON DELETE CASCADE et ON UPDATE CASCADE !!!
    A vous de bien étudier le problème.

  6. #6
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    Salut tout le monde et bon lundi
    annedjomo : tu me dis de normaliser ma base, ok. ça veut dire quoi :
    WOLO Laurent : tu me dis que niveau performance c'est pas génial donc vaudrais mieux que je suppprime moi-même les tuples de chaque table en cascade, c'est bien ça :

  7. #7
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Exactement,
    Vous devez en faire une tâche planifier aux heures non chargées de ton serveur de données.

  8. #8
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    ok bè merci bcp à vous 2
    Tchao

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb avec ON DELETE CASCADE
    Par neantique dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/01/2010, 10h23
  2. On update cascade / on delete cascade
    Par bilred dans le forum SQL
    Réponses: 5
    Dernier message: 16/12/2008, 08h47
  3. problème avec ON UPDATE CASCADE
    Par mehdiyou dans le forum SQL
    Réponses: 3
    Dernier message: 12/04/2008, 14h04
  4. pb requête delete/update avec opérateur like, connexion ADO
    Par jerome666 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/02/2006, 16h47
  5. Delete on cascade avec SQL server
    Par fadoua dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/01/2004, 11h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo