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

Requêtes MySQL Discussion :

Supprimer un enregistrement parent quand on supprime l'enfant ?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 62
    Par défaut Supprimer un enregistrement parent quand on supprime l'enfant ?
    Bonjour, j'ai une base de données dans laquelle j'ai une table ADRESSE. Certaines autres entités peuvent avoir une seule adresse (ex : ADMINISTRATION) et d'autres plusieurs (ex : UTILISATEUR)

    J'aimerais que lorsque je supprime une administration cela supprime aussi son adresse dans la table adresse. Dois je mettre en place un trigger??

    Cela me semble bizarre finalement d'avoir a supprimer un 'parent' quand je supprime un fils...Quelqu'un peut-il me conseiller merci...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE IF NOT EXISTS `administration` (
      `administration_id` int(11) NOT NULL AUTO_INCREMENT,
      `administration_nom` varchar(45) DEFAULT NULL,
      `administration_fax` varchar(45) DEFAULT NULL,
      `administration_description` varchar(300) DEFAULT NULL,
      `administration_efficacite` int(11) DEFAULT NULL,
      `adresse_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`administration_id`),
      KEY `fk_administration_adresse` (`adresse_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Logiquement, ta table ADMINISTRATION est la table-mère, et ta table ADRESSE la table-fille : une administration peut avoir plusieurs adresses, tandis qu'une (occurence d') adresse n'a qu'une administration.

    Si tu me dis qu'une même adresse peut héberger plusieurs administrations, je te répondrais que tu confonds bâtiment et adresses, et qu'il s'agit d'occurences différentes d'une adresse semblable (autrement dit, de doublons ). En effet, l'adresse peut inclure le nom de l'administration, un Cedex différent pour chaque administration hébergée, etc. Enfin, argument massue : quand tu supprimes une administration, l'adresse ne doit être supprimée si elle est susceptible d'héberger une autre administration qui, elle, subsiste !

    Comme tu le vois, le sens de la relation est essentiellement une question de point de vue de ta base :

    1) si tu t'intéresses principalement aux administrations, et que leur adresse n'en est qu'un attribut complexe (ce qui me semble ici être le cas), c'est bien la table ADMINISTRATION la mère. Du coup, il ne te reste plus qu'à supprimer l'adresse_id de cette table, et d'inclure la colonne administration_id sur ADRESSE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    administration_id INT(11) NOT NULL 
    REFERENCES administration(administration_id) 
    ON DELETE CASCADE
    La cascade est ce qui mettra en place la suppression automatique que tu souhaites (sous InnoDB, évidemment).

    2) si au contraire tu t'intéresses principalement à la géographie
    , et que chaque administration n'a qu'une adresse, le sens que tu as indiqué est le bon ; néanmoins, ta suppression automatique n'a effectivement pas beaucoup de sens.

    3) si tu veux normaliser à fond, ça te donne trois tables :

    Administration (administration_id, administration_nom, etc.)
    Adresse (adresse_id, numero, rue, CP, ville, etc.)
    Occupation (administration_id... CASCADE, adresse_id... CASCADE)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 62
    Par défaut
    Bonjour, merci bcp pour votre réponse, celle-ci est très claire. Cependant je n'arrive pas à me décider...

    J'étais parti dans le cas que vous avez appelez 2).
    En fait j'ai créé une table adresse generique afin de ne pas dupliquer les attributs.
    Ensuite plein d'autres tables comme Société, Utilisateur, Administration avait une ou plusieurs adresses. J'ai ensuite laissé la possibilité d'avoir plusieurs adresses seulement pour les utilisateurs avec une table de jonction et j'ai mis une clé étrangère pour les autres. En effet pour moi une société ou une administration n'a qu'une seule adresse

    Finalement la vrai question semble être, dois-je créer une table de jonction dans chaque cas ou pas?
    Quel est à votre avis le meilleur choix?

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    dans le doute, mieux vaut normaliser (donc passer par une table de jonction)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 62
    Par défaut
    Très bien.
    Mais cela va t-il ralentir la base?

    Et dans le cas avec une table de jonction, est ce logique de supprimer le lien dans la table de jonction ET les adresses quand on supprime une administration ou non??

    Merci encore

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Citation Envoyé par enjoy Voir le message
    Très bien.
    Mais cela va t-il ralentir la base?
    non, pourquoi ?

    Citation Envoyé par enjoy Voir le message
    Et dans le cas avec une table de jonction, est ce logique de supprimer le lien dans la table de jonction ET les adresses quand on supprime une administration ou non??
    Non, ce qui est logique c'est de supprimer la jonction quand on supprime une administration ou une adresse.

    Sinon, pourquoi mettre sociétés et administrations dans deux tables différentes ?

Discussions similaires

  1. Erreur 3027 généré quand je veux supprimer un enregistrement
    Par Salsaboy60 dans le forum VBA Access
    Réponses: 2
    Dernier message: 19/03/2014, 20h13
  2. [Mapping] Cascade : supprimer les enfants quand on supprime le parent
    Par gargantua dans le forum Hibernate
    Réponses: 2
    Dernier message: 25/09/2013, 15h47
  3. Supprim un enregistrement de table2 si le même dans table1
    Par arno24 dans le forum Bases de données
    Réponses: 15
    Dernier message: 27/02/2004, 22h40
  4. [LG]supprimer un enregistrement dans un fichier
    Par Marcus2211 dans le forum Langage
    Réponses: 10
    Dernier message: 17/11/2003, 00h59
  5. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37

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