J'ai un modèle "Task" qui va HABTM de nombreux "TaskTargets". Toutefois, en ce qui concerne TaskTargets, j'écris la classe TaskTarget de base qui est abstraite (autant que possible dans Rails). TaskTarget sera sous-classé par différentes conceptualisations de tout ce qui peut être la cible d'une tâche. Donc dire, sous-système logiciel, site client, salle de bain, etc ...Création d'une base de données et d'une relation lors du sous-classement d'un modèle
La conception des classes ici est assez simple, mais où je suis un hic, c'est comment je vais relier tout cela ensemble et comment je vais avoir des rails manipuler ces relations. Ma première pensée est que je vais avoir une table TaskTarget qui contiendra les champs communs de base (nom, description ...). Il aura alors également une relation polymorphe avec une table spécifique au type de données que la classe d'implémentation encapsule. Cela implique que les données pour une instance d'une classe implémentant TaskTarget seront trouvées dans deux tables.
La deuxième approche consiste à créer une relation HABTM polymorphique entre la tâche et les sous-classes de TaskTarget dont je pensais que je pourrais réutiliser le nom de la table TaskTarget pour la table de jointure.
Option 2 Je suppose que c'est le plus robuste, mais peut-être qu'il me manque quelque chose. Merci pour toute aide et bien sûr je demande juste de m'assurer que je l'ai fait correctement, une fois!
Je n'aime vraiment pas l'approche de table unique. Bien qu'il résume parfaitement la relation, je soupçonne que cela deviendra un cauchemar à bien des égards. Je penche vers ma deuxième solution avec une relation polymorphique entre Task et les différents TaskTargets. Cela semble être l'approche la plus courante de Rails. Je serais toujours le bienvenu pour tout type de discussion ou d'autres réponses à ce sujet! Merci! –
Eh bien, quelle hiérarchie anticipez-vous? S'il s'agit d'un ensemble relativement petit de classes avec beaucoup de chevauchement dans les champs requis, je pense que Single Table Inheritance peut être le moyen le plus simple, car cela signifie que vous n'avez pas à manipuler les associations polymorphes et les handles Rails la plupart des bits difficiles pour vous. D'un autre côté, si vous pensez que le nombre de sous-classes peut être très important, alors oui, la table TaskTarget pourrait devenir incontrôlable. –
Je pense que le nombre de sous-classes pourrait augmenter. Leur raison d'être est de pouvoir encapsuler des données qui ne sont pas toujours communes entre les différentes cibles des tâches. –