Bonjour à tous,
Je développe en PHP sous le framework Symfony et son ORM attitré Doctrine, mais pour un projet je tombe sur un os pour penser en tables de bdd ce que j'ai conçu en classes. Je viens donc quérir quelques conseils auprès de vous. J'explique le contexte en quelques mots :
Je fais une application de gestion d'évènements (Jeux Olympiques, séminaire de médecine, marathon, salon de l'auto, festival de musique, compétition de judo, soirée bière/pizza avec des amis, ...), et ces évènements ont lieu à une date et un emplacement; C'est sur le "où" que je travaille.
Un évènement peut avoir lieu :
_A une adresse postale précise (par exemple 5 rue de bidule à Triffouilli, France),
_Dans une salle remarquable (par exemple le parc des expositions de Versailles, qui lui même a une adresse postale bien sûr),
_Dans une zone moins précise (par exemple les jeux olympiques de Tokyo auront lieu dans tout Tokyo, tandis que la coupe du monde au Qatar aura lieu dans tout le pays),
_Online (une url généralement),
_A des coordonnées précises en latitude/longitude GPS (par exemple au milieu d'une forêt... Je vous déconseille d'aller à cet évènement !).
Pour réaliser ceci, ma classe Event possède un attribut de type LocationInterface, et chacun des 5 cas de figure ci-dessus est modélisé par une classe implémentant cette interface.
Mais coté SQL, comment modéliser une telle relation ? Doit on avoir une table event avec 5 Clés étrangères nullables, pour représenter potentiellement l'une de ces relations ?
Ou bien feriez vous ceci à l'aide d'une table d'association, comme une relation Many to many ?
Est-ce un cas de figure commun dont la solution est triviale ? Existe-t-il un pattern connu pour régler cela en base de données ?
Peut être qu'une base non relationnelle (mongoDB etc) serait plus adaptée pour un tel interfaçage ?
Qu'en pensez-vous ?
Merci d'avance,
Cordialement,
Julien
Partager