-
Single Table Inheritance
Bonjour,
Voilà quelques mois que je me suis lancé dans la programmation RoR et voudrais lancer (pour apprendre) un premier site web autour de circuits de randonnées.
Dans ce cadre, je me suis intéressé aux STI pour alimenter ma base de données, mais je me pose pas mal de questions. Peut être que vous pourrez m'aider.
Mes données sont composées de POI (Point of Interêt) qui peuvent se décliner en plusieurs types (hébergement, restauration, services...etc). Chacun de ces types, ont en communs plusieurs champs :
- name
- address
- city
- long
- lat
- pk
... etc
Mais aussi des spécificités propres à chaque type. Les données affichées entre un hébergement, un service, ou autre ne sont parfois totalement différentes. D'où l'idée d'utiliser les STI... mais est ce une bonne idée.
D'après ce que j'ai compris, je vais avoir une première table POI regroupant les informations de base. Je crée un modèle pour chaque type qui héritent du modèle de base POI. C'est là où c'est un peu confu.
Est ce qu'il va y avoir une table pour chaque type avec une liaison avec la table POI, ou bien est ce que chaque type a sa propre table, le modèle POI ne servant qu'à faciliter le codage ?
Autre question, j'utilise simple_form, est ce que je pourrai alimenter ma base facilement car j'ai lu deci delà, que ça pouvait poser un problème ?
Merci d'avance pour vos retours, j'aurai probablement d'autres questions à suivre
-
Je pense que l'intérêt est aussi de tagguer tout ça (tags lieu d'intérêt, tag service, tag hôtellerie... c'est un gem mais c'est facile "à la main" aussi),
et de relier tout ça à la fois autour d'un point [1], de thèmes [2] et en balades [3] ou autres approches encore [4]
[1] les refuges du Mont Blanc sont intéressants parce qu'il y a le Mont Blanc (sinon on n'irait pas) et à l'inverse il est intéressant quand on veut aller au Mont Blanc d'en trouver les refuges.
[2] églises du XIIIe siècle, art brutal, ponts suspendus...
[3] Paris-Chartres ou "Compostelle"
[4] tes utilisateurs pourraient vouloir les ranger ensemble, par exemple d'intérêt général "contourner telle ville à travers champs" ou "les moulins de telle région", ou privé "mes vacances 2018".
Bref pour moi le principe n'est pas tant d'avoir des STI pour des POI, c'est un peu intéressant mais pas tant que ça.
Tu voudras surtout enrichir tes POI (photos), lister des POI (lieux visités ou désirés), et les relier.
Pour moi la question est alors surtout dans les tables de jointures entre les POI. Pas juste une jointure "poi1_id, poi2_id" mais bien "poi1, poi2, type de relation, définie quand et par qui". Tu pourras alors utiliser les has many through et faire des requêtes "malines" sur ta donnée qualifiée.
Pour moi, c'est un peu de code, mais surtout beaucoup de données à qualifier manuellement... alors bon courage :D
-
Merci pour cet avis argumenté. Si sur le fond tu as raison, pour moi c'est avant tout du code puisque je suis en phase d'apprentissage. J'ai continué mon exploration et suis arrivé à la conclusion qu'il fallait que je m'oriente sur des MTI.
Les données génériques du POI étant dans le modèle de base, je pourrais toujours l'enrichir avec autant de nouveaux modèles que je souhaite. Apparement même, pour pouvoir faire ce que tu préconises, l'idéal serait de passer sur Postgis... mais là c'est une autre paire de manches. ;)