Символы залиты на несколько столбцов в Oracle 11g?

Это связано с вопросом: как хранить неограниченное количество символов в Oracle 11g?

Если мне нужно максимум 8000 символов, могу ли я добавить еще 3 столбца varchar2, чтобы у меня было 4 столбца с 2000 символами в каждом, чтобы получить 8000 символов. Поэтому, когда первый столбец заполнен, значения будут перетекать в следующий столбец и так далее. У этого дизайна будут какие-нибудь плохие побочные эффекты? Пожалуйста, предложите.

3 ответа

Почему бы просто не использовать CLOB колонка вместо? Я прочитал вашу другую ссылку, и я не понимаю, почему вашим администраторам баз данных не нравятся эти типы столбцов. Я имею в виду, CLOB это важная особенность Oracle именно для этой цели. И ваша компания заплатила хорошие деньги за эту функцию при покупке Oracle, так почему бы не использовать Oracle с ее полными возможностями вместо того, чтобы пытаться придумывать хаки, чтобы делать что-то, для чего БД не предназначена?

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

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

Я согласен с dcp, что вы должны использовать CLOB. Но если, вопреки всему, вы вынуждены "свернуть свой" неограниченный текст, используя только столбцы VARCHAR2, я бы не стал делать это, добавляя в таблицу все больше и больше столбцов VARCHAR2, например:

create table mytable
  ( id integer primary key
  , text varchar2(2000)
  , more_text varchar2(2000)
  , and_still_more_text varchar2(2000)
  );

Вместо этого я бы переместил текст в отдельную дочернюю таблицу следующим образом:

create table mytable
  ( id integer primary key
  );
create table mytable_text
  ( id references mytable(id)
  , seqno integer
  , text varchar2(2000)
  , primary key (id, seqno)
  );

Затем вы можете вставить столько текста, сколько хотите для каждой строки mytable, используя много строк в mytable_text.

Чтобы добавить к превосходным ответам DCP и Тони:

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

  1. Предположим, вы хотите выполнить поиск ваших текстовых данных для определенной строки. Ваш подход требует повторения поиска по каждому столбцу, содержащему ваш текст, что приводит к запутанному и неэффективному предложению WHERE.
  2. Каждый раз, когда вы хотите расширить свое текстовое поле, вы должны добавить еще один столбец, что теперь означает, что вы должны изменить каждое место, которое вы закодировали, чтобы сделать (1).
  3. Каждый, кто должен поддерживать эту структуру после того, как ты проклянешь свое имя;-)
Другие вопросы по тегам