2008-09-30 6 views
4

В Ruby-on-Rails это называется «полиморфной ассоциацией».Как создать (тип, идентификатор) (aka 'polymorphic') - столбец внешнего ключа в MS Access?

У меня есть несколько Commentable вещи в моем приложении, таблицы для каждого из них ниже:

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

Person 
id | name | ... 

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

Я хотел бы добавить Comments таблицу следующим образом:

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

Я понимаю, что я таким образом, теряют ссылочную целостность базы данных, но единственным вариантом является наличие нескольких таблиц Comments: PostComments, PersonComments, PhotoComments, ...

А теперь вопрос:

Как я могу построить форму, которая, как обращал внимания сделать поиск, первым получает имя таблицы из Comments.commentable_type, а затем идентификатор из Comments.commentable_id?

ответ

4

Этот метод известен в обычном режиме в мире SQL как «подклассификация». Для обработанного примера (синтаксис SQL Server, но легко адаптированный для доступа MS), см. David Porta's blog..

В вашем сценарии элементы данных, общие для всех комментариев, будут в вашей таблице комментариев; любое конкретное для каждого типа было бы в специализированных таблицах, таких как PhotoComments и т. д. Обратите внимание, что FK должно быть двухколоновым соединением идентификатора плюс тип, что часто упускается из виду, но имеет важное значение для ссылочной целостности здесь, например. вы не хотите, чтобы что-то вводилось как комментарий к фотографии в таблице PersonComments.

+0

Итак, как вы делаете форму для этого? То есть, какой хороший подход к пользовательскому интерфейсу? – 2009-01-23 18:54:23

0

Я считаю, что многие люди делают мета-таблицы для такого рода вещей. В значительной степени, как вы описали его.

 Смежные вопросы

  • Нет связанных вопросов^_^