Как создать столбец внешнего ключа (Тип, ID) (он же «полиморфный») в MS Access?

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

  •  03-07-2019
  •  | 
  •  

Вопрос

В Ruby-on-Rails это называется «полиморфной ассоциацией».

У меня есть несколько 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?

Это было полезно?

Решение

Этот метод в просторечии известен в мире SQL как «подклассинг».Рабочий пример (синтаксис SQL Server, но легко адаптируемый для MS Access) см. Блог Дэвида Порты..

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top