Дизайн базы данных и запрос - PullRequest
0 голосов
/ 18 февраля 2011

У меня есть требование иметь несколько подтем по основной теме.И каждая подтема должна иметь возможность иметь n комментариев.

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

Может кто-нибудь посоветовать лучший дизайн / запрос для этого?

Я использую MySQL.

Большое спасибо!- Алекс

Ответы [ 3 ]

1 голос
/ 18 февраля 2011

Я думаю, что этот дизайн базы данных может работать:

TOPIC
id
name

TOPIC_HAS_TOPIC
id
parentId
childId

COMMENTS
id
comment
topicId
1 голос
/ 18 февраля 2011

Необходимые таблицы: Тема SubTopic (родительский ключ указывает на родительскую тему) Комментарий (родительский ключ указывает на родительскую подтему)

Затем для данной подтемы просто выберите все комментарии с этим ключом подтемы.

0 голосов
/ 18 февраля 2011

Вы можете создать это так:

|Topic| -1----*- |SubTopic| -1----*- |Comments|

(РЕДАКТИРОВАТЬ: звездочка, кажется, для курсива. Поэтому, пожалуйста, игнорируйте разницу в цвете)

т.е. отношение 1-ко-многим от темы к подтеме и еще 1-много от подтемы к комментариям

Вы можете иметь суррогатные первичные ключи для таблицы:

Create Table Topic (topic_id int auto_increment, primary key(topic_id),...)

аналогично subtopic_id для подтемы и внешний ключ к теме и т. Д. Для комментариев.

Получение всех комментариев для определенной темы может выглядеть следующим образом: (предполагается, что текстовый атрибут для таблицы комментариев (вероятно, тип данных TEXT?))

select comment.text from comments
join suptopic using(subtopic_id)
join topic using (topic_id)
where topic_id = 1;

( объединение аналогично внутреннее объединение , и ' с использованием ' применимо ТОЛЬКО в том случае, если «объединяющий столбец» имеет то же имя, иначе синтаксис отличается).

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