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 PostgreSQL Discussion :

Un petit souci de conception de ma requête de suppression


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2011
    Messages
    3 948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2011
    Messages : 3 948
    Points : 8 250
    Points
    8 250
    Par défaut Un petit souci de conception de ma requête de suppression
    Bonjour à toutes et tous,

    Je me pose une question de savoir si ce que je veux faire est possible, et si oui, comment.

    J'ai 4 tables qui me permettent de gérer ce qu'on appelle des caractéristiques spécifiques articles.

    Le principe: Chaque article est lié à une et une seule famille. Une famille possède 0 à n caractéristiques. Les caractéristiques sont définies dans une table (nom, type de données, unité, nb décimales). Pour chaque couple Famille/Caractéristique, on définit (les valeurs par défaut, les valeurs mini, maxi).
    Ensuite, pour les articles, on a une table Article/Caractéristiques qui contient les valeurs des caractéristiques de l'article selon sa famille.

    Jusque là pas de problème.
    Les tables en question :

    Table des articles T_Article_ART :
    art_id Serial4
    art_code numeric(20)
    far_id int4 (lien avec T_FamArt_FAR)
    ...

    Table des familles T_FamArt_FAR
    fam_id Serial4
    fam_nom varchar(30)
    ...

    Table des Caratéristiques TR_CaracArt_CAA
    caa_id Serial4
    caa_nom varchar(30)
    ...

    Table des liens Famille/Caractéristiques : TJ_FamartCar_LFC
    lfc_id Serial8
    far_id int4
    caa_id int4
    ...

    Table des liens Articles/Caractéristiques : TJ_ArticleCar_LAC
    lac_id serial8
    art_id int4
    caa_id int4
    ...


    Mon problème c'est que l'utilisateur doit pouvoir changer de famille article. Du coup, je risque de me retrouver avec des liens Article/Caractéristiques qui n'ont pas lieu d'être. J'aimerais donc pouvoir, avec une requête, supprimer dans la table TJ_ArticleCar_LAC les données d'un article dont les caractéristiques ne font pas parti d'une famille.

    J'avais pensé faire une requete DELETE FROM TJ_ArticleCar_LAC Where art_id=(le code article en question) AND (la caractéristique n'appartienne pas à la nouvelle famille)

    Et c'est la que le bât blesse. Je ne sais pas comment coder la condition en gras. Je pense que ça doit être possible, et même très simple quand on sait, mais, j'avoue ne pas avoir d'idée.

    Merci d'avance pour votre aide

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    août 2008
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2008
    Messages : 2 907
    Points : 5 719
    Points
    5 719
    Par défaut
    Pour répondre à la question "la caractéristique n'appartient pas à la nouvelle famille", on peut utiliser NOT EXISTS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DELETE FROM TJ_ArticleCar_LAC lac
     Where lac.art_id = :art_id 
       AND not exists (select 1
                         from TJ_FamartCar_LFC lfc 
                        where lfc.far_id = :new_car_id
                          and lfc.caa_id = lac.caa_id)
    Par contre, il est peut être plus simple de supprimer toutes les caractéristiques de l'article et de les recréer lors de la modification de la famille.
    Sinon il faut gérer l'insertion des nouvelles caractéristiques, la mise à jour des caractéristiques existantes communes aux 2 familles et la suppression telle que demandée.

  3. #3
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2011
    Messages
    3 948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2011
    Messages : 3 948
    Points : 8 250
    Points
    8 250
    Par défaut
    Merci pour la requête, je la testerai ultérieurement (suis en vacances ce soir )
    Sinon, pour ta remarque, ce n'est pas plus simple, car on va perdre les valeurs saisies. Il y a de nombreuses familles avec des caractéristiques communes, et ça arrive d'éclater une famille en 2 et d'ajouter une ou deux caractéristiques à l'une ou l'autre. Perdre les données saisies, c'est pas trop l'idée (déjà que c'est assez chiant à renseigner...).
    Le principe est que sur la fiche article, il y a un onglet dont l'un correspond aux caractéristiques. La table est remplie avec la liste des caractéristiques de la famille et les valeurs correspondantes si elles ont été saisies. Les valeurs non saisies sont identifiées visuellement afin d'alerter l'utilisateur.
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    21 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 21 181
    Points : 50 419
    Points
    50 419
    Billets dans le blog
    1
    Par défaut
    Vous auriez du modéliser votre base avec un héritage. Lisez l'article que j'ai écrit à ce sujet :
    https://sqlpro.developpez.com/cours/...tion/heritage/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [Prototype] Petit souci avec une requête
    Par spy74 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 14/01/2009, 18h54
  2. Un petit souci avec la conception
    Par dasou dans le forum UML
    Réponses: 8
    Dernier message: 16/08/2007, 09h00
  3. [Conception]petit soucis de conception.
    Par le_niak dans le forum Modélisation
    Réponses: 5
    Dernier message: 14/03/2007, 15h48
  4. Petit soucis avec une requête
    Par Jeetiz dans le forum Requêtes
    Réponses: 4
    Dernier message: 01/02/2007, 14h53
  5. [MySQL] Un petit soucis avec la requête, probablement à cause de la jointure
    Par gazouza dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/03/2006, 11h18

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