2010-12-08 2 views
3

Используя сайт вопросов и ответов, как это в качестве примера. Скажем, у меня есть question, answer и comment столов. Вопросы и ответы могут иметь несколько комментариев.Дизайн базы данных: следует ли использовать таблицу сопоставления?

было бы лучше всего:

  1. QuestionComment создания и AnswerComment таблиц для отображения из вопросов/ответов на комментарии (каждый из которых содержит вопрос/ответ рк и комментарий рк)?

  2. Или должен ли я иметь только таблицу комментариев, содержащую 2 ключа, которые могут быть сгруппированы по имени, для ответа на вопрос (один из которых всегда будет пустым, поскольку комментарий может применяться только к одному «элементу»)?

Кажется, что (1) поддерживает ссылочную целостность, а (2) является более компактным. Один из них предпочтительнее другого? Следует ли сохранять таблицы сопоставления только для отношений «многие ко многим»?

+0

Используете ли вы модель домена или будете ли вы получать доступ к структуре базы данных непосредственно в памяти (например, используя ADO.NET DataTables)? – 2010-12-08 00:50:23

ответ

1

Будете ли вы использовать оба комментария таким же образом? Если это так, то (2) в противном случае (1)

Если вы используете (1), вы можете создать представление по обеим таблицам, чтобы они отображались как единое целое.

В случае (2) вы можете добавить триггер, чтобы обеспечить наличие только одного столбца Foreign Key, заполняемого в строке, или как @Ronnis предлагается использовать ограничение CHECK (лучший метод).

+0

Спасибо. (2) просто «чувствует» странно иметь 2 нулевых внешних ключа и «надеяться» на то, что приложение позаботится о целостности плюс логика, чтобы проверить, что заселено. – jmk23 2010-12-08 00:11:54

0

Я видел любой подход делается на практике, но я предпочитаю (1) немного больше:

Я думаю, что (1) выражает свой домен немного более ясно, к кому-то, просматривающие схему - они будут видеть Answer and AnswerComment рядом друг с другом. Если ответы на комментарии и комментарии по ответам находятся в одной таблице, вам нужно просчитать таблицу комментариев, чтобы посмотреть, к какому объекту может относиться комментарий.

Если вы используете domain model с разделением между объектами домена и постоянством, вопрос спорный: неважно, сохраните ли вы их в одной таблице или разных таблицах. (И они будут отдельными классами, только если они ведут себя по-другому.)

Смежные вопросы