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

Schéma Discussion :

Héritage avec MERISE


Sujet :

Schéma

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Héritage avec MERISE
    Bonsoir Mesdames et Messieurs,

    Je suis confronté à un problème et j'aurai besoin de votre aide s'il vous plait.

    Ci-joint l'héritage que j'ai utilisé dans mon schéma, je voudrais savoir si cela est normal (sans problème) d'ajouter un attribut libelle_Categorie (celui-ci contiendera soit: "PLAT", "INGREDIENT", "BOISSON", "VIN") pour pouvoir afficher des résultats comme suit par exemple:

    SELECT COUNT(*) FROM PRODUIT WHERE libelle_Categorie='VIN';

    Nom : MERISE_HERITAGE.jpg
Affichages : 1910
Taille : 41,5 Ko

    Merci par avance

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Ce qui n'est pas une bonne idée c'est de compter des libellés. Vous devriez utiliser un code, qui pointera via une relation sur une entité-type qui fournira le libellé.
    Cette technique fiabilisera vos recherches, garantira l'intégrité de votre SGBD et diminuera le coût CPU et I/O de vos index.

    De plus, vos catégories en l'état vous obligent à créer des redondances : un vin est une boisson et vous aurez donc à le décrire 2 fois
    Vous pouvez empiler les héritages (découper les boissons en vins, eaux, jus de fruits...) ou renommer les ET pour qu'elles correspondent exactement au contenu

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Wozniak Voir le message
    Bonsoir Mesdames et Messieurs,

    Je suis confronté à un problème et j'aurai besoin de votre aide s'il vous plait.

    Ci-joint l'héritage que j'ai utilisé dans mon schéma, je voudrais savoir si cela est normal (sans problème) d'ajouter un attribut libelle_Categorie (celui-ci contiendera soit: "PLAT", "INGREDIENT", "BOISSON", "VIN") pour pouvoir afficher des résultats comme suit par exemple:

    SELECT COUNT(*) FROM PRODUIT WHERE libelle_Categorie='VIN';

    Nom : MERISE_HERITAGE.jpg
Affichages : 1910
Taille : 41,5 Ko

    Merci par avance
    Non c'est stupide car cette information vous l'avez déjà par la jointure.
    Il faut faire cela dans une vue :
    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
    CREATE VIEW V_PRODUIT
    AS
    SELECT *, CASE WHEN PT.ID_PROD IS NOT NULL THEN 'PLAT' 
                   WHEN I.ID_PROD IS NOT NULL THEN 'INGREDIENT' 
    			   WHEN B.ID_PROD IS NOT NULL THEN 'BOISSON' 
    			   WHEN V.ID_PROD IS NOT NULL THEN 'VIN'
    		       ELSE 'inconnu !'
    		  END AS NATURE 
    FROM   PRODUIT AS P
           LEFT OUTER JOIN PLAT AS PT
    	        ON P.Id_PROD = PT.ID_PROD
    	   LEFT OUTER JOIN INGREDIENT AS I
    	        ON P.Id_PROD = I.ID_PROD
    	   LEFT OUTER JOIN BOISSON AS B
    	        ON P.Id_PROD = B.ID_PROD
    	   LEFT OUTER JOIN VIN AS V
    	        ON P.Id_PROD = V.ID_PROD;
    Si vous ajoutez votre colonne vous aurez 2 problèmes :
    1) REDNDANCE vous augmentez le volume des données pour rien. Ceci sera contre performant
    2) si vous avez fait une erreur de saisie (mettre un plat dans la catégorie vin), vous allez avoir, soit une "désynchronisation" des données, soit l'obligation de rajouter des déclencheurs supplémentaire pour gérer tous les cas de figure. Donc soit des données fausse, soit d’énorme pertes de performances !

    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/ * * * * *

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Merci
    Re bonjour,
    Je vous remercie pour votre aide, cependant ayant obligatoirement besoin d'un attribut CategorieProduit plus tard (pour être plus explicite dans la création d'une DIMENSION pour un Entrepôt de données, si je n'ai pas quelque part libelleCategorieProduit je ne pourrais pas créer une dimension CategorieProduit)

    Que pourriez-vous me proposer comme solution s'il vous plait?

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    Un attribut n'est pas nécessaire pour ce besoin, le traitement qui extrait les données à destination de votre infocentre pourra déterminer la catégorie en fonction d'un test d'existence par exemple

Discussions similaires

  1. Héritage avec restriction merise
    Par white_flower dans le forum Merise
    Réponses: 15
    Dernier message: 11/07/2014, 04h00
  2. [Méthodes]Conception d'un SI avec Merise ou UML
    Par bagman dans le forum Méthodes
    Réponses: 3
    Dernier message: 25/06/2008, 20h33
  3. Generics et héritage avec Java 5.0 Tiger
    Par euyeusu dans le forum Langage
    Réponses: 3
    Dernier message: 17/01/2007, 11h41
  4. modelisation avec merise
    Par T'chab dans le forum Access
    Réponses: 1
    Dernier message: 29/05/2006, 13h09
  5. Utiliser un héritage avec exclusion mutuelle correctement
    Par akecoocoo dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 20/11/2005, 22h54

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