какой тип лучше использовать для флага

......
Дата: 04.12.2007 18:12:59
какой тип лучше использовать для флага ('Y','N') : char(1) или varchar2(1)
p@sh@
Дата: 04.12.2007 18:14:10
......
какой тип лучше использовать для флага ('Y','N') : char(1) или varchar2(1)
А сам-то как думаешь?
......
Дата: 04.12.2007 18:17:35
char, но в существующем коде везде varchar
OraDen
Дата: 04.12.2007 18:20:18
NUMBER(1) NOT NULL
Стивка-Бурка
Дата: 04.12.2007 19:07:22
blob chunk 256m disable storage in row :)
OracleX
Дата: 04.12.2007 20:32:51
OraDen
NUMBER(1) NOT NULL
А почему это лучше, чем VARCHAR2(1)?
NUMBER(1) на сервере занимает 2 байта вместо 1 (если не multi-byte),
а на клиенте 4 байта (если настроили на приведение к Integer) вместо 2.

А вообще, даже в известных прикладных программах отдается предпочтение разным подходам.

ComPiere (версия для Oracle):
  IsActive CHAR(1) DEFAULT 'Y' NOT NULL CHECK (IsActive in ('Y','N')),

Парус:
  SEX NUMBER(1) DEFAULT 0  NOT NULL CHECK (SEX in (0, 1, 2)),

BioSQL:
  Is_Obsolete VARCHAR2(1) NULL CONSTRAINT IsObsolete1 CHECK (Is_Obsolete = 'X'),
mcureenab
Дата: 04.12.2007 21:47:52
Если TRUE и FALSE значения имеют чисто прикладной смысл, то ComPiere хороший вариант.
Так, например предикат COL=:V будет одинаковым и для TRUE и для FALSE.

Если поле имеет системный смысл, например TRUE отмечает необработанные сообщения в очереди, или данные по сути сильно перекошены в сторону TRUE либо FALSE, то вариант Is_Obsolete поможет эффективнее использовать индексы, но и запросы к таблице перестанут быть инвариантными к искомому значению флажка.

Использовать NUMBER не следует. Значение будет занимать 2 байта да и не факт, что сравнение NUMBER будет быстрее сравнения CHAR.

Разница VARCHAR2(1) и CHAR(1) может проявляться на уровне приложений БД. Так varchar2 на C++ скорее будет отображён в ANSI строку произвольной длины, тогда как CHAR в массив char[1]. В базе данных VARCHAR2(1) и CHAR(1) хранятся одинаково.
OracleX
Дата: 04.12.2007 22:18:19
OracleX
Дата: 04.12.2007 22:40:49
Кроме того, значения NUMBER малоинформативны.
Например, для случая SEX DEFAULT 0 CHECK (SEX in (0, 1, 2)) можно только гадать,
какому полу присвоены значения 0 и 1.

Значение 2, скорее всего, соответствует N/A по стандарту ISO.

DEFAULT 0 - это вообще из области сексизма.
bI!
Дата: 05.12.2007 08:01:37
OracleX

DEFAULT 0 - это вообще из области сексизма.

У нас один кекс справочник замутил, по поводу пола....
Но это скорее в рубрику "Просто посмеяться"....
:)