@Bodrosh

Как организовать правильную структуру БД?

Здравствуйте.

Не раз встречалась ситуация, когда необходима связь таблиц, в которых ключ в последующей таблице является ключем предыдущей + уникальный столбец, например, задача следующая:
Требуется БД для хранения тестов (пользователи сами добавляют сколько угодно тестов, сами добавляют варианты ответов )
В БД "Тесты" есть Таблицы, жирным - ключ таблицы:
Пользователи (id_юзера, почта и т.д.)
Тесты_пользователей (id_юзера, id_теста, назание_теста, осписание_теста и т.д.)
Вопросы_тестов_пользователей (id_юзера, id_теста, id_вопроса, сам_вопрос и т.д.)

Или, например, по той же схеме БД для хранения результатов тренировок (пользователи создают программу тренировок, в нее добавляют скажем 3 дня тренировок, в них накидывают упражнения для каждого из них)
Пользователи, Программы_тренировок_пользователей, Номера_тренировок_программ_пользователей, упражнения_номеров_тренировок_ программ
И в итоге результат сохраняется в таблице с множеством внешних ключей.

Правильный ли это подход или может стоит пересмотреть что-то, может литературу какую-нибудь посоветуете по БД?

Как лучше хранить варианты ответов - отдельными строками в БД или прямо в таблице с вопросом в отдельном поле, а потом парсить вывод?

Интересует хранение тестов, где разрозненная структура, т.е. один вопрос может быть чекбоксами, другой радиокнопками, третий - пользователь сам вводит ответ. Как это лучше хранить? Спасибо.
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 3
AlexKeller
@AlexKeller
Ну вот для "Тесты_пользователей" поле "id_юзера" это внешний ключ на юзера. Тут нормально. А для "Вопросы_тестов_пользователей" хранение "id_юзера" уже бессмысленно, т.к. есть "id_теста" и всегда можно заджоинить.

По поводу "один вопрос может быть чекбоксами, другой радиокнопками". Можно ввести параметр внутри таблицы вопросов, который отвечает за тип вариантов ответа - RADIO|CHECKBOX|INPUT. И в зависимости от этого типа на UI рисовать нужные поля для вариантов (если они есть).

Варианты ответов лучше хранить в отдельной таблице, деструктурированные данные гораздо проще использовать. Просто задаем внешний ключ на "id_вопроса"
Ответ написан
Комментировать
@AVKor
может литературу какую-нибудь посоветуете по БД?

Kroenke, David M., Auer, David J. Database Processing.
Connolly, Thomas M., Begg, Carolyn E. Database Systems: A Practical Approach to Design, Implementation, and Management.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы