Символы залиты на несколько столбцов в Oracle 11g? - PullRequest
0 голосов
/ 08 июня 2010

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

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

Ответы [ 3 ]

11 голосов
/ 08 июня 2010

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

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

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

3 голосов
/ 08 июня 2010

Я согласен с 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.

2 голосов
/ 08 июня 2010

Чтобы добавить в DCP's и Тони отличные ответы:

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

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