Положительные или отрицательные логические имена полей - PullRequest
8 голосов
/ 18 сентября 2009

Булевы поля таблицы могут быть названы с использованием положительного и отрицательного ...

например, вызов поля:

"ACTIVE" , 1=on / 0=off 
or
"INACTIVE" , 0=on / 1=off

Вопрос: Есть ли правильный способ принять решение такого типа по дизайну стола, или это произвольно?


Мой конкретный пример - таблица сообщений с полем bool (private / public). Это поле будет установлено с помощью флажка формы, когда пользователь вводит новое сообщение. Есть ли преимущество в названии поля «public» против «private»?

спасибо.

Ответы [ 7 ]

20 голосов
/ 18 сентября 2009

Я всегда предпочитаю положительные имена, чтобы избежать двойных отрицаний в коде. «Не неактивен» часто является причиной двойного взятия при чтении. «Неактивно» всегда можно записать как «if (! Active)», используя преимущества встроенной языковой семантики.

15 голосов
/ 18 сентября 2009

Мои личные предпочтения:

  • Используйте префиксы типа «Есть», «Имеет» и т. Д. Для логических полей, чтобы прояснить их назначение.
  • Всегда называйте переменные в утвердительно . Для Active / Inactive я бы назвал это IsActive.
  • Не делайте битовое поле обнуляемым, если у вас нет для этого конкретной цели.

В вашем конкретном случае использования поле должно называться либо IsPublic, либо IsPrivate - в зависимости от того, какое имя будет получено, ответ True, когда пользователь поставит галочку.

2 голосов
/ 18 сентября 2009

я бы не согласился с некоторыми другими ответами, но определенно избежал бы неправильного ответа, который не всегда должен заключаться в двойные отрицания

1 голос
/ 18 сентября 2009

Правильный способ справиться с этими ситуациями - создать таблицу для размещения значений, связанных со столбцом, и создать отношение внешнего ключа между двумя таблицами. IE:

WIDGETS таблица:

  • WIDGET_ID
  • WIDGET_STATUS (фк)

WIDGET_STATUS_CODES таблица:

  • WIDGET_STATUS_CODE (шт.)
  • DESCRIPTION

Если возможно, WIDGET_STATUS_CODE будет естественным ключом (IE: ACT для «Active», INA для «Inactive»). Это сделает записи более удобочитаемыми для человека, но это не всегда возможно, поэтому вы должны использовать искусственный / суррогатный ключ (например, автоматический номер / последовательность / и т. Д.).

Вы хотите сделать это, потому что:

  • Понятно, что означает статус (какой был первоначальный вопрос)
  • Будущее доказательство необходимости определения / использования большего количества статусов
  • Обеспечивает ссылочную целостность, чтобы кто-то не мог установить значение 2, 3, 4 и т. Д.
  • Пространство дешево; 1039 * ничего эффективного в разрешении неверных данных нет
1 голос
/ 18 сентября 2009

Всегда используйте положительное.

Это проще.

Продолжайте использовать отрицание до логического предела: если InActive лучше чем Active, то почему не InInActive или InInInActive?

Потому что это было бы не так просто.

1 голос
/ 18 сентября 2009

Всегда используйте положительные имена.

Если вы используете отрицательные имена, вы очень быстро попадаете в двойное отрицание. Не то, чтобы двойное отрицание - это ракетная операция, но это мозговой цикл, и они ценны

0 голосов
/ 19 сентября 2009

Старайтесь вообще избегать логических полей в базах данных.

Во-первых, в RM есть гораздо лучший способ представления достоверной информации, чем через логические поля: через присутствие кортежа в таблице.

Два, логические поля являются очень плохими различителями при запросах. Индексировать их практически полное безумие, поэтому при запросе присутствие логических полей не дает никакой пользы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...