Вероятно, есть несколько способов сделать это, сохранив внешние ключи.
Во-первых, в основном есть таблица комментариев для каждого типа;держать их отдельно.Для каждого комментария есть внешний ключ к родительской галерее или изображению, в зависимости от таблицы.
Второй - иметь таблицу (скажем, commentables), которая содержит общие данные для всего, что можно комментировать.Каждая галерея или изображение имеет внешний ключ для уникальной соответствующей строки в комментариях.Каждая строка в таблице комментариев имеет внешний ключ для комментария, а также текст комментария, дату и т. Д.
Возможно, вы все равно найдете это полезным, поскольку в конечном итоге вам понадобятся метаданные для коллекция комментариев в целом ... например, чтобы указать, отключено ли комментирование, включено ли оно только для друзей или включено для всех.
Редактировать Вариант 3 аналогичен параметру1, но вместо того, чтобы иметь полные отдельные таблицы комментариев для каждого комментируемого типа, просто используйте отдельные ассоциативные таблицы для каждого комментируемого типа.
|comments| |gallery_comments| |image_comments |
-------- ---------------- ---------------
|id (pk)| |comment_id (fk)| |comment_id (fk)|
|text | |gallery_id (fk)| |image_id (fk)|
|date | ---------------- ---------------
|author |
--------
На мой взгляд, намного лучше, чем вариант 1.