2016-06-10 1 views
0

J'ai plusieurs 'modules' (pour l'instant, 4), chacun ayant sa propre table.Mysql plusieurs colonnes pour la relation polymorphique - faisable?

Je veux implémenter un système d'étiquette pour tous ces modules. Les étiquettes auront une relation de plusieurs à plusieurs entre chaque module respectivement.

Pour mettre en œuvre cette relation polymorphes, je pensais de créer un tableau croisé dynamique comme celui-ci:

tag_name | module_1_id | module_2_id | module_3_id | module_4_id ... ainsi de suite.

n'importe quelle ligne de ce tableau pivotant tag_module aura un fk valide à exactement un module_id et le reste sera défini sur null.

Ma question est, est-ce une façon extrêmement dangereuse de procéder à cette mise en œuvre? Y at-il des moyens qui sont de loin meilleurs que cela pour obtenir ce que je veux?

Comment est-ce que je peux assurer l'unicité d'un tag_name avec un module_N_id, signifiant qu'un élément particulier d'un module particulier devrait avoir une étiquette spécifique assignée seulement une fois?

De même, au fil du temps, le nombre de modules va augmenter, donc à l'avenir, il est possible que le nombre de colonnes soit de 10,20 voire 50. Ce type de mise en œuvre va-t-il empêcher ce type de croissance?

Répondre

1

Il vous suffit de créer une table avec les champs identifiant de module et nom d'étiquette et de créer un index unique multi-colonne sur ces 2 colonnes (vous pouvez ajouter n'importe quel autre champ à la table). L'index unique multi-colonnes vous permettra d'associer le même nom de tag à plusieurs modules, mais vous empêchera d'attribuer plusieurs fois le même nom de tag au même module.

+0

ok, donc tag_id + module_1_id + module_2_id ..... module_N_id sera-t-il unique? Mis à part cela, y a-t-il des problèmes avec ce type de design? –

+0

Je ne comprends pas vraiment votre question. – Shadow

+0

Je veux demander si cette conception a de sérieux problèmes de performance ou des problèmes? va augmenter le nombre de colonnes à 30 ralentir les performances? –