Je continue de rencontrer ce problème de conception et je ne suis pas satisfait de ma solution jusqu'à présent. Le problème est:Meilleure pratique pour les relations partagées entre plusieurs tables
J'ai deux ou plusieurs entités, comme People et Dogs, et ils ont tous deux une relation avec une table Notes, qui stocke un champ de message et quelques méta-données sur le message comme peut-être l'auteur.
1) La première option consiste à ne pas appliquer la clé étrangère. De cette façon, je peux stocker le FK comme PeopleId ou DogId (peu importe ce que c'est) dans le même champ FK générique comme fkId. Ensuite, je stocke la tableId dans une autre colonne - on peut espérer obtenir l'ID de la table à partir des métadonnées RDMS, mais vous pouvez également avoir un hack sale et faire explicitement une table complète de tables que vous auriez à mettre à jour manuellement . C'est vraiment bâclé et je le mentionne juste pour l'exhaustivité.
2) Cloner la table Notes pour chaque table qui en a besoin, comme PeopleNotes, DogNotes, CatNotes, etc. Cela crée un problème majeur de normalisation.
Qu'ont fait les autres personnes dans de telles situations?