В клоне StackOverflow допустимо ли, чтобы вопросы и ответы были отдельными таблицами? - PullRequest
5 голосов
/ 12 июня 2009

На основании дампа данных StackOverflow кажется, что S.O. представляет вопросы и ответы в виде единой таблицы - сообщения.

Однако вопрос имеет заголовок, тело и теги, связанные с ответом, а ответ имеет только тело. Для меня, по крайней мере, это указывает на то, что они достаточно различны, что они должны быть отдельными таблицами.

Кроме того, мне не нравится писать "and type='question'" в моем SQL.

Это действительные причины?

Или есть веская причина для помещения вопросов и ответов в одну таблицу?

Ответы [ 4 ]

2 голосов
/ 12 июня 2009

На самом деле я думаю, что мы слышали достаточно подсказок на подкасте, чтобы предположить, что они хранятся в одной таблице - также похоже, что идентификационные номера для вопросов и ответов не перекрываются. Может они сделали это по соображениям производительности? Например, будет возможно заполнить данные для страницы, подобной этой, в одном сканировании таблицы сообщений, а не в одном сканировании вопросов и одного из ответов.

2 голосов
/ 12 июня 2009

Вопросы и ответы имеют много общего - автор, дата, комментарии и т. Д. Разделение таблицы (поскольку схемы SQL обычно не поддерживают наследование) означает много дублирования (таблицу комментариев, вероятно, также придется разделить или иметь глупый дизайн с двумя внешними ключами, один для таблицы Q и один для таблицы Таблица, из которых ровно одна должна быть ненулевой).

Да, есть и различия между вопросами и ответами, и преимущества, как вы указываете, и наоборот. «Вы платите свои деньги, вы делаете свой выбор»! -)

2 голосов
/ 12 июня 2009

Я бы разделил их в принципе только потому, что они разные звери. У вопроса есть заголовки (как вы сказали), теги, избранные маркеры и (предположительно) предмет поиска по попытке обнаружения дубликатов.

Мне показалось бы, что они достаточно различны, чтобы оправдать отдельную таблицу.

Однако мы не знаем , как SO хранит их в базе данных, вы видели только экспорт в дамп данных - возможно, функция экспорта объединяет вопросы и ответы в сообщения.

Может также случиться, что информация, общая для вопросов и ответов, хранится в одной таблице, а дополнительные элементы, относящиеся к конкретному вопросу, - в другой таблице. Если не спросить SO разработчиков, я не могу придумать, как это подтвердить.

0 голосов
/ 12 июня 2009

Лучше иметь вопросы и ответы в отдельной таблице. Вы можете сопоставить их, используя идентификатор вопроса (например, 985113 в этом вопросе)

Существует возможность закрыть вопросы (> 3 тыс. Повторений) в SO, и одна из причин - дублирующий вопрос Мы должны ввести идентификатор вопроса или часть вопроса. Запомните, если ответы и вопросы находятся в одной таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...