Этот вопрос возникал несколько раз на различных форумах при моем поиске, но ни один не дал краткого решения.
Если у меня есть следующие таблицы:
User
+- id
+- username
+- password
Article
+- id
+- title
+- content
и я хочу присоединиться к ним Чтобы определить, кто какие статьи создал, я мог просто добавить столбец user_id в Статью для использования в качестве ссылки. В качестве альтернативы я добавляю промежуточную таблицу, чтобы показать, кто / когда / что, например:
User
+- ...
Article
+- ...
ChangeHistory
+- id
+- article_id
+- user_id
+- type [enum(insert, update, delete)]
+- datetime
Теперь все в порядке, но система, над которой я работаю, должна быть гораздо более динамичной, чтобы новые модули можно было легко введен и интегрирован. Итак, теперь, если я добавлю таблицу Media , мне нужно разделить ChangeHistory между Article и Media , имеющими:
User
+- ...
Article
+- ...
Media
+- id
+- title
+- path
ArticleChangeHistory
+- id
+- article_id
+- user_id
+- type [enum(insert, update, delete)]
+- datetime
MediaChangeHistory
+- id
+- media_id
+- user_id
+- type [enum(insert, update, delete)]
+- datetime
Это может получить быстро вышел из-под контроля с введением множества модулей. Каждый модуль должен нести ответственность за создание и управление собственной таблицей ChangeHistory .
TL; DR: Какие методы я могу изучить для создания промежуточной таблицы, которая может получать ссылки на несколько других несвязанных таблиц ? Я мог бы добавить поле * record_type *, содержащее имя таблицы, к которой принадлежит запись, но это некрасиво. Мне понадобится что-то вроде « идентификатор таблицы », чтобы ссылаться на таблицу, из которой он исходит. Таким образом, когда / если модули добавляются или удаляются, модель не разваливается.
Есть идеи? Заранее большое спасибо.