Схема БД для хранения вопросов и ответов матрицы опроса

Я пытаюсь создать схему БД для хранения вопросов и ответов на опрос, в то время как я не могу придумать схему для хранения данных.

Вот мой пример вопроса, который я хочу сохранить в базе данных:

Любые указатели о том, как мне это сделать, высоко ценится!

PS: я прошел эти посты на SO, но они не помогли:

Система реляционных баз данных с динамическими столбцами с динамическими строками

Хранение дистанционной матрицы в БД

SQL дизайн для опроса с ответами разных типов данных

Редактировать 1

PS:

Я хочу создать схему для хранения всех типов вопросов из SurveyMonkey.com и Qualtrics.com. Там в любом случае?

3 ответа

Google stackru вопросы о sql и вопросники / опросы. Читайте о EAV и его проблемах. (Например, ищите мои ответы для EAV).

Одним из вариантов является использование базовой таблицы для каждого вопроса со столбцом для вертикальной и столбцом для горизонтальной, где запросы по нескольким вопросам запрашивают метаданные базы данных, а СУБД управляет целостностью вопроса. Другой вариант - EAV, где каждый запрос по вопросу включает построение соответствующей таблицы из предыдущего предложения, и целостность управляется вами с помощью сложных ограничений.

Единственным недостатком первого варианта является то, что современные СУБД не делают обновления DDL такими же эффективными, как обновления DML. Вы должны структурировать свое программное обеспечение так, чтобы оно не зависело от выбранного вами варианта. Если вы используете EAV, вы программируете свою собственную СУБД.

Вы можете найти примеры форматов экспорта и загрузки данных опроса для ответов и опросов, например SurveyMonkey.com и Qualtrics.com ( данные или опросы).

Версия MySQL

CREATE TABLE MatrixQuestion (username VARCHAR (45) НЕ NULL КОММЕНТАРИЙ 'бывший Майкл', meal VARCHAR (10) NOT NULL КОММЕНТАРИЙ 'ex завтрак, обед, ужин', rate TINYINT NOT NULL КОММЕНТАРИЙ 'ex 1: плохой 2: средний 3: хороший 4: хороший 5: отличный', ПЕРВИЧНЫЙ КЛЮЧ (meal, username, rate));

Вы можете создать три таблицы как

Таблица FoodType

FoodId - PK (TINYINT) -- 1,2,3
FoodName - varchar(50)-- breakfast, lunch, dinner

Таблица RatingType

RatingId - PK (TINYINT) --1,2,3,4,5
RatingName - varchar(50) --poor,average,fair,good, awesome

Таблица UserRating

UserName - varchar(100)
RatingId - FK (TINYINT)
FoodId - FK (TINYINT)

Теперь для каждого пользователя Обратная связь сделайте запись в таблице UserRating

Другие вопросы по тегам