2008-09-30 5 views
4

Dans Ruby-on-Rails, cela s'appelle une "association polymorphe".Comment créer une colonne (type, ID) (alias 'polymorphic') - clé étrangère dans MS Access?

J'ai plusieurs Commentable choses dans ma demande, les tableaux pour chacun sont ci-dessous:

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

Person 
id | name | ... 

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

Je voudrais ajouter une table Comments comme suit:

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

Je comprends que je perdre l'intégrité référentielle de la base de données de cette façon, mais la seule autre option est d'avoir plusieurs tables Comments: PostComments, PersonComments, PhotoComments, ...

Et maintenant la question:

Comment puis-je construire une forme qui assimilez comment faire la recherche, d'abord en obtenant le nom de la table de Comments.commentable_type puis l'id de Comments.commentable_id?

Répondre

4

Cette technique est connue familièrement dans le monde SQL en tant que «sous-classe». Pour un exemple travaillé (syntaxe SQL Server, mais est facilement adapté pour MS Access), voir David Porta's blog..

Dans votre scénario, les éléments de données communs à tous les commentaires figureraient dans votre tableau Commentaires; tout ce qui est spécifique à chaque type serait dans des tableaux spécialisés tels que PhotoComments, etc. Notez que le FK doit être le composé à deux colonnes de l'ID plus le type, quelque chose qui est souvent négligé mais qui est essentiel à l'intégrité référentielle ici. vous ne voulez pas que quelque chose soit tapé comme un commentaire de photo apparaissant dans la table PersonComments.

+0

Alors, comment faites-vous le formulaire pour cela? C'est-à-dire, quelle est une bonne approche de l'assurance-chômage? –

0

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

Questions connexes