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 :

Gestion d'une table avec listes de référentiel [Entité-Association]


Sujet :

Schéma

  1. #1
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Points : 133
    Points
    133
    Par défaut Gestion d'une table avec listes de référentiel
    Bonjour,

    Comment gérez-vous la modélisation d'une table constituée de nombreuses listes de référentiel ?

    Prenons par exemple la définition d'une personne.

    Une personne possède :
    - un sexe (référentiel : femme/homme)
    - une taille (référentiel : -140cm, 141cm, ..., 210cm, +210cm)
    - un poids (référentiel : -40kg, 41kg, ..., 150kg, +151kg)
    - cheveux (référentiel : bruns, blonds, roux, gris, chauve, ...)
    ...
    1/ Faites-vous une table par référentiel et la table personne n'est qu'une série de clés étrangères ?
    2/ Faites-vous une vue de personne qui réalise les n jointures ?
    3/ Côté code, faites-vous les n DAO, les n entité ?

    Si oui, tout ça devient vite très très lourd à gérer.

    Merci,
    Dorian

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 792
    Points : 34 013
    Points
    34 013
    Billets dans le blog
    14
    Par défaut
    Pour commencer, je dirais que la taille et le poids ne sont des référentiels que si l'interface utilisateur propose des plages de mesures ("entre 140 et 150 cm", "entre 70 et 80 kg"...), si c'est un nombre saisi par l'utilisateur, ce n'est plus un référentiel mais un nombre donc une simple colonne valuée dont on peut vérifier la cohérence (entre les bornes d'une plage réaliste de valeurs) par un trigger, une contrainte CHECK (sauf avec le mauvais MySQL qui ne les a toujours pas implémentées ! ) ou, plus salement, par le programme utilisateur.

    Ensuite, tu as le choix entre effectivement créer une table par référentiel ou bien travailler par métadonnées en mélangeant tous les référentiels dans ces métadonnées.

    1) Modèle par référentiel
    personne -1,1----avoir---0,n- couleur_cheveux
    |---------------1,1----avoir----0,n- couleur_yeux

    Tables :
    tr_couleur_cheveux_cch (cch_id, cch_libelle)
    tr_couleur_yeux_cyx (cyx_id, cyx_libelle)
    te_personne_prs (prs_id, prs_id_couleur_cheveux, prs_id_couleurs_yeux...)

    2) Modèle par métadonnées
    personne -0,n----avoir----0,n- bareme_caracteristique -(1,1)----appartenir----1,n- caracteristique


    Tables :
    tr_caracteristique_car (car_id, car_nom)
    tr_bareme_caracteristique_bca (bca_id_caracteristique, bca_numero, bca_libelle)
    te_personne_prs (prs_id...)
    tj_prs_avoir_bca_pab (pab_id_personne, pab_id_bareme_caracteristique, pab_valeur)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Points : 133
    Points
    133
    Par défaut
    Salut CinePhil,

    Merci pour ta réponse.

    Je te confirme de suite les plages de mesure, mon exemple est à revoir.

    La solution 2 est très pratique côté maintenance, un DAO "bareme_caracteristique", une entité "bareme_caracteristique", etc.

    L'inconvénient que j'y voyais c'est que le schéma ne peut pas valider :
    1) la relation 0,1 par contrainte d'intégrité référentiel pour chaque caractéristique,
    2) la présence de toutes les caractéristique obligatoires,
    3) surtout le requêtage (yx bleux + 150cm ou chx blonds) !

    Pour le point 1), je viens juste de penser qu'il était possible de placer une contrainte d'unicité entre (pab_id_personne, pab_id_bareme_caracteristique). On peut donc imaginer une gestion de métadonnées pour les relations pour les relation 1 max et une autre pour les relations n max.
    Pour le 2) il faudra gérer ça côté code.
    Pour le 3) très très lourd à gérer, preneur de conseils sur ce point.

    Qu'en penses-tu ?

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 792
    Points : 34 013
    Points
    34 013
    Billets dans le blog
    14
    Par défaut
    L'inconvénient que j'y voyais c'est que le schéma ne peut pas valider :
    1) la relation 0,1 par contrainte d'intégrité référentiel pour chaque caractéristique,

    Pour le point 1), je viens juste de penser qu'il était possible de placer une contrainte d'unicité entre (pab_id_personne, pab_id_bareme_caracteristique).
    Elle y est déjà puisque c'est la clé primaire de la table !

    2) la présence de toutes les caractéristique obligatoires,

    Pour le 2) il faudra gérer ça côté code.
    Ce sera probablement plus facile à gérer au niveau du formulaire de saisie effectivement.

    3) surtout le requêtage (yx bleux + 150cm ou chx blonds) !

    Pour le 3) très très lourd à gérer, preneur de conseils sur ce point.
    C'est effectivement le point le plus chiant avec le modèle par métadonnées !
    On peut aboutir rapidement à des requêtes avec pleins de jointures sur la même table.

    Mais on sort là du côté modélisation.

    Commence par concevoir ta BDD en réfléchissant bien à ce qui relève des caractéristiques à valeurs à choisir dans une liste fermée et ce qui relève de la saisie simple, éventuellement avec un contrôle du réalisme des valeurs (1,20 m pour 500 kg ! ).
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 945
    Points : 30 716
    Points
    30 716
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    éventuellement avec un contrôle du réalisme des valeurs (1,20 m pour 500 kg ! ).
    M’enfin... d'après le tableau ci-dessous, Nicolas Batum pèse quand même bien 41 kg, ça n’est pas assez ? Wes Matthiews et Marcus Camby portent bien le même numéro, des joueurs ont plus de 2000 ans, etc. Pas mal, non ? Dans ces conditions, pourquoi n'aurait-on pas des pivots de 1,20 m ayant 2000 ans et pesant 500 kg ?

    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 792
    Points : 34 013
    Points
    34 013
    Billets dans le blog
    14
    Par défaut
    Ce qui prouve justement que ces données manquent de contrôle !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Points : 133
    Points
    133
    Par défaut
    Merci, je vais poser le pour et le contre du métadonnée.

  8. #8
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Points : 133
    Points
    133
    Par défaut
    J'ajouterais un point 3bis) également au niveau des contraintes des métadonnées.
    Le requêtage se limite au problème de lecture mais c'est tout le CRUD qui devient compliqué et lourd en gestion.

    Partons du principe que "personne" existe. Pour mettre à jour les caractéristiques...

    Dans le cas 1 :
    - UPDATE pour création, modification et suppression (NULL).

    Dans le cas 2 :
    - INSERT à la création (ou REPLACE),
    - UPDATE à la modification (ou REPLACE),
    - DELETE à la suppression.

    Ce qui doit être beaucoup plus consommateur et long en traitement.

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 792
    Points : 34 013
    Points
    34 013
    Billets dans le blog
    14
    Par défaut
    Euh...

    UPDATE pour la création ?
    UPDATE pour la suppression en mettant les valeurs à NULL !
    fsmrel va sortir sa sulfateuse ! Le bonhomme NULL est interdit de séjour au Relationland !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Euh...

    UPDATE pour la création ?
    UPDATE pour la suppression en mettant les valeurs à NULL !
    fsmrel va sortir sa sulfateuse ! Le bonhomme NULL est interdit de séjour au Relationland !
    Citation Envoyé par dorian53 Voir le message
    Partons du principe que "personne" existe. Pour mettre à jour les caractéristiques...
    Oui dans le cas 1 sans métadonnées.

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

Discussions similaires

  1. [AC-2007] Inserer la valeur dans une table avec une liste qui en alimente une autre
    Par DidoFido dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/12/2009, 12h39
  2. Gestion d'une table de base de données avec JCombox
    Par cotede2 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 29/10/2009, 17h25
  3. Remplir une table avec la liste des projets
    Par Pikouse dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 28/05/2008, 10h15
  4. Réponses: 35
    Dernier message: 21/03/2007, 11h36
  5. [SQL] Liste déroulante à partir d'une table avec tri
    Par ksper92 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/11/2006, 12h25

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