@ ответ cletus полезен, но использует «extends», что вряд ли является стандартным термином для отношений, поэтому позвольте мне предложить свои 2 цента.
Я бы предположил, что комментарии (о чем вы конкретно спрашиваете) относятся к «элементам», очень общей категории, охватывающей вопросы, ответы и, возможно, еще больше вещей (хотя в комментариях SO речь идет только о вопросах или ответах) .
Таким образом, элементом будет таблица с PK ItemId, всеми полями, общими для всех элементов (временная метка, на которой он был создан, идентификатор пользователя в виде FK в таблице пользователей и т. Д.) И, возможно, «ItemType» msgstr "поле, используемое для выбора какой другой таблицы (Вопросы, Ответы, возможно, еще больше), чтобы получить конкретные детали для определенного элемента, если таковые имеются. Я бы, вероятно, проиндексировал каждый из них, так как я могу легко представить поиск элементов в определенный промежуток времени, опубликованных определенным пользователем, & c.
Комментарий будет иметь свой собственный PK CommentId, FK ItemId, временную метку, UserId автора и, возможно, еще пару столбцов, если вы разрешаете повышать / понижать голоса по комментариям (или даже просто повышать их голоса в виде SO) , пометка, & c.
Чтобы получить, скажем, "все комментарии пользователя IDC к элементам пользователя IDI", я бы запросил:
SELECT * FROM Comments
JOIN Items USING (ItemId)
WHERE Comments.UserId = @IDC
AND Items.UserId = @IDI
Я надеюсь, что все другие интересующие запросы столь же очевидны, как и этот (если все интересные запросы тривиально просты, это хорошо говорит о схеме БД, которая делает их такими; -).