Конкретный вопрос проектирования базы данных - PullRequest
0 голосов
/ 08 января 2011

Моя текущая база данных состоит из следующих таблиц.

Рейтинг пользователей заданных вопросов -

user( uid(varchar), qid(varchar), rating(varchar), primary key(uid, qid) )

Сохранить вопрос и его идентификатор -

questions( uid(varchar), question(text), primary key(qid) )

Храните отношения, которые имеют вопросы друг с другом -

related( qid(varchar), related_qid(varchar), relation(varchar), primary key(qid, related_qid, relation) )

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

INSERT INTO related (qid, related_qid, Relations) ЗНАЧЕНИЯ (1, 2, gt)
где «gt» означает «больше чем».

Проблема в том, что кодирование отношений не выглядит элегантным. У кого-нибудь есть лучшее решение?

1 Ответ

1 голос
/ 08 января 2011

Я бы изменил типы столбцов.Я думаю, что qid и related_qid будут наилучшими в качестве целых чисел для быстрых объединений, и related можно изменить на тип перечисления, если он доступен в вашей базе данных (например, MySQL имеет ENUM ).

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

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

Кроме этих пунктов, это кажется разумным дизайном.

...