Conception de BDD: relation n-n

leica69 Messages postés 14 Date d'inscription vendredi 12 février 2010 Statut Membre Dernière intervention 20 février 2013 - 3 oct. 2008 à 17:54
leica69 Messages postés 14 Date d'inscription vendredi 12 février 2010 Statut Membre Dernière intervention 20 février 2013 - 9 oct. 2008 à 19:00
Bonjour,
je souhaiterais concevoir une BDD mais avant d'attaquer j'aurais une question à vous poser.

En simplifiant, voici ma situation:
Je veux mettre en relation une table de médicaments et une table de propriétés (antitussif, expectorant, ...)

t_medicaments{
   medic_id
   medic_nom
}

t_proprietes{
   prop_id
   prop_nom
}

Chaque médicament a plusieurs propriétés.
Chaque propriété peut être exercée par plusieurs médicaments.
On se trouve donc dans une relation n-n

Quel est, d'après vous, le meilleur moyen de mettre en relation ces deux tables?
A/ Créer une 3ème table liant les 2 premières?
t_relations{
   relation_id
   relation_medic_id
   relation_prop_id
}

ou

B/ Ajouter à la table médicaments un autre champ qui aurait une sorte de "array" des prop_id qui lui correspondent?
t_medicaments{

   medic_id

   medic_nom
   medic_proprietes

}

pour obtenir qqch du genre:
   medic_id     medic_nom     medic_proprietes
   1                  aspirine            ['1';'32']
   2                  medicChose     ['22';'32']
   3                  medicTruc        ['43';'1']

Si je prends l'option B, pour trouver les médics ayant la propriété 23, je devrais faire un
SELECT * FROM t_medicaments WHERE 'medic_proprietes' LIKE '23'

Je n'ai jamais travaillé avec l'option B. Selon votre expérience, quelle méthode est préférable, pratique, conviviale???

Merci pour vos futurs conseils.
Antonio

3 réponses

Bling 182 Messages postés 510 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 5 juillet 2009 3
5 oct. 2008 à 11:32
L'option B fonctionne, mais est contraire au formalisme de construction d'une table...
Donc utilise la solution A
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 oct. 2008 à 19:49
Hello,

et puis surtout, LIKE est TRES lent.
Sans compter que ça ne te faciliterait pas la tâche pour sortir des états/reporting/statistiques.
En effet, choix A sans hésiter. Sauf que je ne nommerais pas mes champs ainsi mais ça...c'est une simple préférence.
0
leica69 Messages postés 14 Date d'inscription vendredi 12 février 2010 Statut Membre Dernière intervention 20 février 2013
9 oct. 2008 à 19:00
Merci pour vos conseils, je prend donc la méthode A.

J'ai d'autres questions sur le développement de ma BDD, j'ai fait un autre post http://www.sqlfr.com/forum/sujet-CONCEPTION-BDD-RELATION_1210869.aspx#2

Si vous pouviez y jeter un oeil, ça m'aiderait certainement.

Antonio
0
Rejoignez-nous