Мне, кажется, часто хочется хранить данные более одного типа (обычно целые и текстовые) в одном столбце в базе данных MySQL. Я знаю, что это ужасно, но причина, по которой это происходит, заключается в том, что я храню ответы людей на вопросы в вопроснике. Некоторые вопросы требуют целочисленного ответа, некоторые - текстового ответа, а некоторые могут быть элементом, выбранным из списка.
Подходы, которые я использовал в прошлом:
Сохраняйте все как текст и преобразуйте в int (или что-то еще), когда это потребуется позже.
Имеет два столбца - один для текста и один для int. Затем вы просто заполняете один ответ на строку в ответе, а второй оставляете пустым.
Имеют две таблицы - одну для текстовых ответов и одну для целочисленных ответов.
Мне, правда, не нравится ни один из них, и я чувствую, что должен быть гораздо лучший способ справиться с такой ситуацией.
Чтобы сделать это более конкретно, вот пример таблиц, которые у меня могут быть:
CREATE TABLE question (
id int(11) NOT NULL auto_increment,
text VARCHAR(200) NOT NULL default '',
PRIMARY KEY ('id')
)
CREATE TABLE response (
id int(11) NOT NULL auto_increment,
question int (11) NOT NULL,
user int (11) NOT NULL,
response VARCHAR(200) NOT NULL default ''
)
или, если я воспользовался вариантом 2 выше:
CREATE TABLE response (
id int(11) NOT NULL auto_increment,
question int (11) NOT NULL,
user int (11) NOT NULL,
text_response VARCHAR(200),
numeric_response int(11)
)
и если бы я использовал вариант 3, то были бы таблица responseInteger и таблица responseText.
Является ли какой-либо из этих подходов правильным или я упускаю очевидную альтернативу?