База данных Oracle: организованная по индексу таблица со значениями NULL (в первичном ключе из нескольких столбцов) - PullRequest
4 голосов
/ 06 января 2011

Как можно задать для столбца значение "" (пустая строка, эквивалентная NULL в Oracle), если этот столбец является частью первичного ключа из нескольких столбцов?Это мотивация ...

CREATE TABLE entities (
  column1  VARCHAR2(10)
, column2  VARCHAR2(10)
, body     VARCHAR2(4000)
, CONSTRAINT pk_entities            -- can't do this, because sometimes
  PRIMARY KEY ( column1, column2 )  -- col2 is the empty string (NULL).
) ORGANIZATION INDEX ...

Обычно я бы использовал "настоящий" первичный ключ, такой как бессмысленный последовательный идентификатор (см. этот вопрос ), а затем установил бы уникальное ограничениеповерх моих столбцов данных, например ...

CREATE TABLE entities (
, id       NUMBER PRIMARY KEY
, column1  VARCHAR2(10)
, column2  VARCHAR2(10)
, body     VARCHAR2(4000)
, CONSTRAINT unq_entities 
  UNIQUE ( column1, column2 )
) ORGANIZATION INDEX ...

Однако это большая таблица с индексами (IOT), поэтому первичный ключ имеет для столбцов данных(в IOTs данные являются индексом) или еще ... Что мне делать?

Спасибо!♥

Ответы [ 3 ]

2 голосов
/ 06 января 2011

К сожалению, это «особенность», свойственная Oracle. В отличие от других СУБД SQL он не поддерживает строковое значение нулевой длины и настаивает на преобразовании его в нулевое значение.

Вы можете создать другой столбец в качестве флага для представления строки нулевой длины, а затем хранить пробелы вместо самого столбца. Я не думаю, что есть идеальный обходной путь, хотя. Немного удивительно, что Oracle не устранил это странное ограничение, особенно учитывая колоссальные улучшения, которые они внесли в другие способы соответствия стандарту SQL.

1 голос
/ 06 января 2011

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

0 голосов
/ 06 января 2011

Зачем вам нужен стол, чтобы быть IOT?UNIQUE INDEX для столбца column1, column2 с таблицей кучи, вероятно, будет почти столь же эффективен для извлечения данных.

IOT (аналогично таблице с кластеризованным индексом) являются исключением, а не нормой в Oracle.

...