Используйте одну таблицу для комментариев и используйте GUID
в качестве первичных ключей для ваших энтитов.
Затем вы можете выбирать комментарии, даже не зная заранее, где они принадлежат:
SELECT CommentText
FROM Comments c, Restaurants r
WHERE c.Source = r.Id
SELECT CommentText
FROM Comments c, Chains ch
WHERE c.Source = ch.Id
и т.д.
Конечно, вы не можете использовать внешние ключи для комментариев, но это не значит, что комментарии не могут жить без внешних ключей.
Вы можете убрать осиротевшие комментарии в триггерах, но нет ничего плохого, если некоторые из них останутся.
Вы также можете создать глобальную таблицу Entity
(с одним столбцом GUID
), чтобы ваши Chains
, Restaurants
, MenuItems
и Comments
ссылались на эту таблицу с FOREING KEY ON DELETE CASCADE
, и когда DELETE
, скажем, в ресторане, удалите его из этого стола. Он удалит как ресторан, так и все комментарии к нему, и вы сохраните свою целостность.