Отчасти связано с моим вопросом о целых числах вместо десятичных; Мой поставщик предоставляет множество «логических» полей в формате char (1) (т.е. Y / N). Некоторые из этих полей законно не могут быть логическими, потому что они могут иметь несколько значений, но большинство может рассматриваться как логическое. В моем предыдущем вопросе совет заключался в том, чтобы делать то, что «правильно» вместо того, что предоставляет поставщик; я должен все еще применить эту логику и создать мою схему базы данных, используя битовое поле для этих столбцов, или оставить ее как char (1) и выполнить преобразование в моем коде?
Также по этому вопросу, как я должен иметь дело с полями трех состояний, насколько идет код? Логически поле является логическим (в том смысле, что меня интересует только значение Y / N, а третье значение действительно либо да, либо нет), но значения могут быть больше, чем просто истина / ложь (например, существует UpsShippable
поле, которое может быть Y
, N
или G
); это поле имеет несколько состояний, так как мне лучше всего его инкапсулировать? Что-то вроде enum (или статических констант, поскольку Enums нельзя использовать с типом char)? В случаях с несколькими значениями данные больше похожи на индикатор типа, чем на флаг.
Подводя итог (я получаю немного скучный): 1) Имея дело со char(1)
значениями в данных, вы бы сохранили их как символы или преобразовали в биты (или как бы то ни было булев тип вашей базы данных) и почему и 2) Как бы вы занялись полем char с тремя состояниями в вашем коде, предполагая, что вы оставите его как char(1)
в схеме данных?
РЕДАКТИРОВАТЬ: Для пояснения, ни одно из этих полей не используется для "реальной" логики, это в основном просто индикатор. Например, если товар не может быть отправлен через UPS (т. Е. Значение N / G), то на странице, обращенной к клиенту, говорится, что товар не может быть отправлен через UPS, а на бэкэнде логика не будет вызов веб-службы UPS для расчета стоимости доставки. Другие поля Y / N просто присутствуют в качестве дополнительной информации об элементе и не имеют логики, хотя они должны быть изменяемыми (например, иметь флажок, указывающий, перерабатывается ли он в форме ввода данных на внутренней стороне); Я мог бы отобразить изображение или отфильтровать элементы по ним (например, вы можете искать все переработанные продукты, и я проверю, чтобы убедиться, что их индикатор переработанных продуктов верен), но ничего другого, по крайней мере, на данный момент.