Дизайн базы данных: я должен использовать таблицу сопоставления? - PullRequest
3 голосов
/ 08 декабря 2010

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

Будет ли лучше:

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

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

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

Ответы [ 2 ]

1 голос
/ 08 декабря 2010

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

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

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

0 голосов
/ 08 декабря 2010

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

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

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

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