Таблицы базы данных, одна таблица ссылается на несколько несвязанных таблиц

Этот вопрос возникал несколько раз на различных форумах при моем поиске, но ни один не дал краткого решения.

Если у меня есть следующие таблицы:

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

Есть идеи? Заранее большое спасибо.

5
задан Dan Lugg 22 October 2010 в 17:15
поделиться