Почему бы просто не использовать NULL
для обозначения «н/д»?
Else use TINYINT
с таблицей поиска, содержащей значения 0, 1 и 2 (или, возможно, 1, 2 и 3) и их значения. Затем вы добавляете FK между двумя таблицами, чтобы обеспечить, чтобы вводились только эти значения.
последний выбор должен был бы состоять из столбца CHAR(1)
. Это было бы нормально , только если вы также указали двоичную сортировку, такую как Latin1_General_100_BIN2
. Binary Collation сделает так, что вы не потеряете производительность по сравнению с двумя другими вариантами. Без бинарного столбца колонка строк сравнивает значения с лингвистическими правилами, которые занимают дополнительное время, но не имеют никакого значения для этого использования. Вам также понадобится AFTER INSERT, UPDATE
Trigger для первого это значение для согласованности, а затем для обеспечения того, чтобы все значения были либо Y
, N
, либо A
(для «н/д»). Это более читаемо, чем 0, 1 и 2 (через TINYINT
) и столь же эффективны для поиска, а также всего 1 байт, но для использования нужно помнить, чтобы указать только буквы верхнего регистра, иначе они могут не получить ожидаемые результаты ,
Там нет причин вообще использовать VARCHAR(3)
и хранить полные значения N/A
/Yes
/No
, если вы просто не заботиться о системе становится все медленнее ;-).
+1000 к этому. Битовый тип данных не имеет 2 значения, он имеет 3. 1, 0 и NULL. –
Отличная идея и простейшая реализация, так как я могу оставить только DB и просто изменить код. Благодаря! –
@SeanLange Спасибо :). Не уверен, что вы когда-либо сталкивались с разработкой SilverLight/XAML, но это была единственная среда, которую я видел там, где они предлагали флажок trinary boolean в качестве элемента формы. Вы могли бы проверить его, снимите флажок, а затем отключите его! Unset будет в основном затененным в флажке, явно отличным от галочки. Было очень приятно. –