Этот вопрос несколько раз поднимался на разных форумах в моем поиске, но ни один из них не дал краткого решения.
Если у меня есть следующие таблицы:
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 *, содержащее имя таблицы, к которой принадлежит запись, но это ужасно. Мне нужно что-то вроде " идентификатор таблицы ", чтобы ссылаться на таблицу, из которой он идет. Таким образом, когда / если модули добавляются или удаляются, модель не разваливается.
Есть идеи? Большое спасибо заранее.