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

Développement SQL Server Discussion :

Problème de relations et on delete


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 614
    Par défaut Problème de relations et on delete
    Bonjour,
    Admettons le schéma suivant :

    Entre Table1 et Table2 la relation indique "on delete cascade"
    Entre Table1 et Table3 la relation indique "on delete cascade"
    Entre Table3 et Table2 la relation indique "on delete set NULL"

    En ben ça, mssql ne le tolère pas. Apparemment il considère que si on supprime un item de Table1, les ligne correspondantes à Table3 dans Table2 ne pourront plus être mises à jour (NULL sur IDTable3) par la suppression des items dans Table3 via la contrainte entre Table1 et Table3.

    J'ai réalisé exactement le même schéma sur MySql et là, c'est OK.
    Il me semblerais qu'une contrainte delete cascade soit prioritaire sur une contrainte delete set null.
    D'autre part, si l'on supprime un item de Table1, tant les items correspondants dans Table3 que ceux dans Table2 disparaitront. Donc la contrainte delete set null devient caduque dans ce cas...

    Qu'est-ce que vous en pensez ???

    Ou alors, c'est tellement gros que je n'y vois plus rien...

    Bonne journée

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Je me suis simplement arrêté sur le schéma (physique au passage) avant de lire la suite : ne pensez-vous pas qu'il y a un problème ?

    En ben ça, mssql ne le tolère pas. Apparemment il considère que si on supprime un item de Table1, les ligne correspondantes à Table3 dans Table2 ne pourront plus être mises à jour (NULL sur IDTable3) par la suppression des items dans Table3 via la contrainte entre Table1 et Table3.
    Normal. Cela s'appelle l'intégrité référentielle. C'est ce que vous avez demandé.

    J'ai réalisé exactement le même schéma sur MySql et là, c'est OK.
    Ben c'est du propre

    Il me semblerais qu'une contrainte delete cascade soit prioritaire sur une contrainte delete set null.
    Les contraintes n'ont pas de priorité.
    ça sort de MySQL ça aussi ?

    D'autre part, si l'on supprime un item de Table1, tant les items correspondants dans Table3 que ceux dans Table2 disparaitront. Donc la contrainte delete set null devient caduque dans ce cas...
    Normal aussi.

    Qu'est-ce que vous en pensez ???
    Que votre modèle est faux, et que cela ne me donne pas envie de bosser avec MySQL

    @++

  3. #3
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 614
    Par défaut
    Citation:
    D'autre part, si l'on supprime un item de Table1, tant les items correspondants dans Table3 que ceux dans Table2 disparaitront. Donc la contrainte delete set null devient caduque dans ce cas...

    Normal aussi.
    Alors justement, la contrainte entre Table3 et Table2 doit être possible...
    Que votre modèle est faux,
    Ça je veux bien mais ça ne fait pas avancer mon schmilblick...

    Donc je m'explique quant au schéma...

    Table1 = des entreprises
    Table2 = des collaborateurs
    Table3 = des bureaux
    Les collaborateurs peuvent avoir ou ne pas avoir de bureau.
    Si je supprime un bureau, tous les collaborateurs de se bureau n'en ont plus. Ils bossent à la maison par exemple. Donc collaborateur.bureau = null
    Si je supprime une entreprise, tous les collaborateurs disparaissent. Tous les bureaux également.

    Alors, comment puis-je représenter cela autrement que par le schéma ci-dessus ?

  4. #4
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 614
    Par défaut
    Re bonjour elsuket,
    Est-ce que ma vision des choses est complètement fausse ?

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Non, elle me semble correcte.
    Par contre votre modèle n'implémente pas cela.
    Il ne devrait pas y avoir autant de relations.

    Donc :

    - soit vous considérez que les bureaux appartiennent à l'entreprise, et qu'un collaborateur est affecté à un bureau
    - soit vous considérez qu'un bureau est affecté à un employé, et qu'un employé est employé par l'entreprise.

    Quelle est l'assertion qui répond exactement à votre besoin ?

    @++

  6. #6
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 614
    Par défaut
    Dans mon cas ce serait :
    les bureaux appartiennent à l'entreprise, et un collaborateur est affecté à un bureau

    Mais un collaborateur peut très bien n'être affecté à aucun bureau donc :
    collaborateur.bureau = null

    Je peux très bien ajouter un bureau, y affecter des collaborateurs.
    Je peux aussi supprimer un bureau. Dans ce cas tous les collaborateurs affectés à ce bureau n'ont plus de bureau mais, par contre, ils font toujours partie de l'entreprise...

    Ca, c'est l'exemple simplifié de mon problème.

    En réalité, j'ai un affichage d'une entreprise. Soit :
    - une entreprise qui possède des ateliers
    - des ateliers qui possèdent des machines
    Ce schéma là est la représentation physique de la réalité. Donc une machine ne peut pas exister si elle ne fait pas partie d'un atelier. Jusque ici, pas de problème.

    Maintenant, sur l'interface de l'application, l'utilisateur peut créer sa propre structure d'entreprise pour ranger ces machines par groupes et ce de manière totalement libre.

    Donc :
    - une machine peut appartenir à un groupe ou non. -> machine.groupe = groupe ou NULL
    - un groupe fait par contre forcément partie d'une entreprise

    Alors :
    - si je supprime l'entreprise, je supprime par contrainte les atelier et les machines d'un côté, les groupes de l'autre.
    - si je supprime un groupe, je dois forcément mettre les références à ce groupe dans les machine à NULL...

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

Discussions similaires

  1. problème de relations
    Par dolphin96 dans le forum Access
    Réponses: 3
    Dernier message: 23/07/2006, 22h24
  2. Problème de relation double
    Par Rub-n dans le forum Access
    Réponses: 1
    Dernier message: 31/05/2006, 18h07
  3. Problème de relation entre deux tables + autre chose
    Par Goth_sensei dans le forum Langage SQL
    Réponses: 7
    Dernier message: 30/03/2006, 20h49
  4. [conception] Requête de sélection problèmes de relations
    Par snoopy69 dans le forum Modélisation
    Réponses: 26
    Dernier message: 08/11/2005, 14h23
  5. Gestion club sportif (problème de relations )
    Par jemaflo dans le forum Access
    Réponses: 3
    Dernier message: 03/10/2005, 23h00

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