Конкретный вопрос дизайна базы данных
-
08-10-2019 - |
Вопрос
Моя текущая база данных состоит из следующих таблиц.
Магазин пользователей Рейтинги данных вопросов -
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. Эти отношения будут храниться в таблице «Связанные» как
Вставьте в связанные значения (qid, ratchen_qid, отношение) (1, 2, gt)
где «GT» означает «больше».
Вопрос в том, что кодирование отношений не кажется вообще элегантным. У кого-нибудь есть лучшее решение?
Решение
Я бы изменил типы колонн. я думаю qid
а также related_qid
будет лучшим, чем целые числа для быстрого присоединения, а также related
может быть изменен на тип перечисления, если он доступен в вашей базе данных (например, MySQL имеет Порицать).
PS: Также возможно имитировать перечисление в базах данных, у которых нет типа Enum с помощью таблицы для хранения возможных значений и настройки ограничения внешнего ключа к этой таблице.
Я также не уверен, почему ваш пользовательский стол имеет первичный ключ двух столбцов. Я бы представлял, что единственный столбец будет достаточным, но трудно быть уверенным, не зная больше о вашем приложении.
Кроме этих точек, кажется разумным дизайном.