Comment créer une colonne de clé étrangère (type, ID) (ou «polymorphe») dans MS Access?

StackOverflow https://stackoverflow.com/questions/154209

  •  03-07-2019
  •  | 
  •  

Question

Dans Ruby-on-Rails, cela s'appelle une "association polymorphe".

J'ai plusieurs éléments commentables dans mon application, les tableaux correspondants sont ci-dessous:

Post
id | title | text | author (FK:Person.id) | ...

Person
id | name | ...

Photo
id | title | owner (FK:Person.id) | path | ...

J'aimerais ajouter une table Comments comme suit:

Comments
id | commentable_type | commentable_id | text | author (FK:Person.id)

Je comprends que je perds ainsi l’intégrité référentielle de la base de données, mais la seule autre option consiste à avoir plusieurs tables Comments : PostComments , PersonComments , PhotoComments , ...

Et maintenant pour la question:

Comment puis-je créer un formulaire qui permette de faire la recherche, en obtenant d'abord le nom de la table à partir de type_servicementable , puis l'identifiant à partir de Commentairessantmentmentable ?

Était-ce utile?

La solution

Dans le monde SQL, cette technique est connue sous le nom de "sous-classement". Pour un exemple concret (syntaxe SQL Server mais s’adapte facilement à MS Access), voir Le blog de David Porta. .

Dans votre scénario, les éléments de données communs à tous les commentaires se trouveraient dans votre table Commentaires. tout ce qui est spécifique à chaque type se trouverait dans des tableaux spécialisés tels que PhotoComments, etc. Remarque: le FK doit être composé de l'ID à deux colonnes et du type, ce qui est souvent négligé mais essentiel à l'intégrité référentielle, par exemple. vous ne voulez pas que quelque chose soit saisi sous forme de commentaire photo dans le tableau PersonComments.

Autres conseils

Je crois que beaucoup de gens font des méta-tables pour ce genre de chose. À peu près exactement comme vous l'avez décrit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top