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 :

Besoin d'aide pour faire un choix de MCD


Sujet :

Schéma

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut Besoin d'aide pour faire un choix de MCD
    Bonjour tout le monde,

    J'ai une question simple à propos d'un MCD sur lequel je bosse :

    J'aurais dans mon application des utilisateurs qui auront pas mal d'attributs, comme par exemple couleur de cheveux, couleur des yeux, niveau d'études, etc. la liste est longue.

    A la base, j'aurais fait ma table utilisateurs dans laquelle j'aurais placé des attributs tel que :

    id_couleur_cheveux
    id_couleur_yeux
    id_niveau_etude

    puis j'aurais eu 3 tables, respectivement couleur_cheveux, couleur_yeux puis niveau_etude avec la structure suivante :

    couleur_cheveux(id_couleur_cheveux,libelle_couleur)

    Voilà pour la solution la plus évidente qui me venait à l'esprit, seulement je me suis dit que ca allait être lourd de faire 20 tables de ce style si j'ai 20 critère sur mes utilisateurs.

    Je me suis dit alors, que je pouvais faire une table qui regrouperait mes 20 critères et qui aurait la structure suivante :

    table_multi_criteres(id_critere,cle_critere,valeur_critere)

    voici un exemple de tuple de cette table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     1 | couleurCheveux | Brun
     2 | couleurCheveux | Blond
     3 | couleurCheveux | Roux
     4 |    couleurYeux   | Noir
     5 |    couleurYeux   | Vert
     6 |    niveauEtude   | Bac
     7 |    niveauEtude   | Bac+1
    .....
    Bref cette table contiendrais tous les critères applicables à un utilisateur, et ma table utilisateurs quant à elle contiendrait autant de clés étrangères que de critères applicables.

    Je suis donc face à ces deux architectures mais je ne sais pas laquelle choisir, j'ai très envie d'utiliser la seconde car elle me parait beaucoup plus souple : 1 seule table quelque soit le nombre de critères, mises à jours facilitées, etc.

    Serait-ce le bon choix d'après vous ?

  2. #2
    Membre averti Avatar de Soutou
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 328
    Points : 378
    Points
    378
    Par défaut
    Oui ça me parait bien, d'autant plus que si d'autres critères arrivent dans le temps il suffit d'ajouter des lignes.
    Tu aurais ainsi 3 tables Utilisateur qui contient les données propres et uniques de chaque personne (nom, age, etc.), la table multicritere et la table qui relie les deux précédentes pour exprimer qu'une personne est associée à plusieurs critères.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    Bonjour,

    Tout d'abord merci beaucoup pour ta réponse, je commençais à croire que je n'en aurais pas du coup j'ai fait ma base en choisissant cette solution sauf que moi j'ai mis en dur dans la table Utilisateur toutes les clés étrangères faisant réference à un critère.

    Du coup je n'ai pas la table qui fait la relation entre Utilisateur et Critere, mais c'est sur que c'est moin souple niveau évolutivité car si j'ajoute un critère je dois aussi faire un alter table sur la table Utilisateurs pour ajouter une nouvelle clé étrangère...

  4. #4
    Membre averti Avatar de Soutou
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 328
    Points : 378
    Points
    378
    Par défaut
    Je serais toi je reviendrais en arrière car ta solution va générer pas mal de problèmes notamment dans la présence de nombreuses valeurs NULL.

    tables

    utilisateur(id_util, nom, age...)
    multi_criteres(id_critere,cle_critere,valeur_critere)
    caractéristiques(id_util#,id_critere#)

    # : clé étrangère

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    C'est sur que la mesure où un utilisateur ne sera pas tenu de compléter son profil à 100%, j'aurais des NULL.

    Merci pour ton intervention, je vais revoir mon schéma de cette manière.

    Bon week-end

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

Discussions similaires

  1. Besoin d'aide pour faire une procédure stockée
    Par PoichOU dans le forum SQL
    Réponses: 17
    Dernier message: 30/04/2007, 17h55
  2. Réponses: 42
    Dernier message: 11/03/2007, 14h09
  3. Besoin d'aide pour faire fonctionner un Script d'upload d'images
    Par PaoOo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 15/06/2006, 21h24
  4. [VBA-E]besoin d'aide pour faire une boucle
    Par mikazounette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/04/2006, 14h04
  5. Besoin d'aide pour faire un script
    Par shinux2004 dans le forum Langage
    Réponses: 4
    Dernier message: 16/07/2005, 16h44

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