Я записываю данные формы у пользователя и сохраняю эти данные в базе данных MySQL. Многие вопросы - это вопросы «Да/Нет». После небольшого исследования я решил пойти с TINYINT для типа данных. Теперь, если для одного из вопросов потребуется текстовый ввод, если ответ «Да», но нет ввода текста, если ответ «Нет», очевидно, мне понадобится VARCHAR для этого ввода.MySQL с использованием NULL/NOT NULL VARCHAR вместо TINYINT
CREATE TABLE `UserResponse` (
`question1` TINYINT NOT NULL, # 0="No", 1="Yes"
`question1Details` VARCHAR(45) NULL
)
Так что мой вопрос ... Так как VARCHAR всегда будет NULL, когда TINYINT является 0, будет ли это иметь больше смысла, чтобы просто иметь VARCHAR и забыть о TINYINT для «Да»/«Нет» ?
CREATE TABLE `UserResponse` (
`question1` VARCHAR(45) NULL # NULL="No", !NULL="Yes" + details
)
Мои мысли: Использование двух столбцов может засорять базу данных, если есть много примеров такого рода вопрос (может означать 40 столбцов, а не 20, к примеру). Что касается пространства ... VARCHAR требуется независимо, и его значение не влияет на использование TINYINT или нет. Поэтому, если мы удалили TINYINT, он сохранил бы 1 байт за экземпляр за строку. Единственное, что я вижу с этим, это интерфейсный код, который читает/изменяет таблицу, будет немного более сложным и менее читаемым, поскольку должен интерпретировать NULL/NOT NULL для получения данных по 2 вопросам из одного и того же столбца вместо имея простую связь 1 столбец за вопрос.
В любом случае это может быть сделано, и в любом случае все будет нормально работать. Но какова лучшая практика? Если вы столкнулись с любым методом во время работы с базой данных, разработанной кем-то еще, для вас было бы важно, чтобы они использовали этот метод, а не другой?