Корректное построение таблиц и связи между ними MSSQL

Изначальное задание

Нужно спроектировать базу данных для хранения результатов тестирования студентов (в отдельном приложении). О студенте хранится информация: специальность, группа, курс, ФИО. В базе данных храниться информация о различных тестах (название теста, автор). Каждый тест состоит из нескольких тестовых заданий (вопросов). На каждый вопрос может быть несколько вариантов ответов (ответы в свободной форме не допускаются). Считается что студент должен ответить на все вопросы теста. Любой тест студент может проходить несколько раз, каждый раз должны сохраняться сведения о тестировании.

Созданная мной диаграмма

диаграмма[![введите сюда описание изображения

Меня интересует создание и вывод теста на экран. Логика - есть тест, у теста есть вопросы, у вопросов есть ответы. Проблема в моих таблицах - Test_ID и Question_ID уникальны. Изначально думал о том, что вывод теста будет выглядеть примерно так: (CorAns - столбец с bool значением, 0 - неверный ответ, 1 - верный) Первый select - выбор по всей таблице, второй - только "именные" значения. Однако такой способ представления не совпадает с логикой деления теста на 3 таблицы (тест, вопросы, ответы). И получится, что диаграмма будет иметь 3 бессвязных таблицы: Tests(без первичного ключа), PassedTests (для учета пройденных тестов) и Students, которыми придется оперировать в приложении.

Вопрос

Насколько данная структура будет грамотна и как лучше будет ее переделать (думаю, что в приложении будет трудно и нерационально оперировать такой большой таблицей)?


Ответы (1 шт):

Автор решения: Aziz Umarov

Вы близко, но конечно желательно переделать.

  • Question(id, text)
  • Answer (id, questionId, value, correctYN)

  • Test (id, name, ...)

  • TestQuestion (id, testId, questionId)

  • Student (id, ...)

  • StudentTest (id, studentId, testId, date, score, passYN,....)
  • StudentTestQuestion (id, studentTestId, testQuestionId)
  • StudentTestQuestionAnswer (id, studentTestQuestionId, answerId)

подумайте над подобной структурой.

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

→ Ссылка