Уникальное ограничение без индекса - PullRequest
0 голосов
/ 12 июня 2019

допустим, у меня большой стол.

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

Я хочу предотвратить дублирование строк в таблице, поэтому я хочу добавить уникальный

ограничение (или PK) для таблицы.

Но автоматически созданный уникальный индекс действительно не нужен.

Мне это не нужно, оно просто тратит место на диске и требует обслуживания (независимо от продолжительности его создания).

Есть ли способ создать уникальное ограничение без индекса (любой индекс - уникальный или неуникальный)?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 12 июня 2019

Нет, в Oracle не может быть УНИКАЛЬНОГО ограничения без соответствующего индекса. Индекс создается автоматически при добавлении ограничения, и любая попытка удалить индекс приводит к ошибке

ORA-02429: cannot drop index used for enforcement of unique/primary key

Удачи.

EDIT

Но вы говорите: «Скажем, у меня большой стол». Так сколько строк мы говорим здесь? Смотри, 1 ТБ SSD стоят меньше 100 долларов Четырехъядерные ноутбуки стоят меньше 400 долларов. Если вы пытаетесь свести к минимуму использование хранилища или загрузку ЦП, написав кучу кода с минимальной возможностью «сэкономить деньги» или «сэкономить время», я предлагаю вам потратить оба время и деньги . Повторяю - ОДИН TERABYTE хранилища стоит столько же, сколько ОДИН ЧАС времени программиста. BRAND SPANKING NEW COMPUTER стоит столько же, сколько ЧЕТЫРЕ ЧЕРТЫХ ЧАСА времени программиста. Вам гораздо лучше делать все возможное, чтобы минимизировать ВРЕМЯ КОДИРОВАНИЯ, а не традиционные цели оптимизации времени ЦП или дискового пространства. Таким образом, я утверждаю, что УНИКАЛЬНЫЙ индекс является недорогим решением.

1 голос
/ 12 июня 2019

Может быть Индексные таблицы - это то, что вам нужно?
Но строго организованная по индексу таблица - это таблица, хранящаяся в структуре индекса - можно сказать, что существует только индекс без таблицы, в то время как вам нужно иметь таблицу без индекса, так что это наоборот:)

CREATE TABLE some_name
(
 col1           NUMBER(10)    NOT NULL,
 col2           NUMBER(10)    NOT NULL,
 col3           VARCHAR2(50)  NOT NULL,
 col4           VARCHAR2(50)  NOT NULL,
 CONSTRAINT pk_locations PRIMARY KEY (col1, col2)
)
ORGANIZATION INDEX 
1 голос
/ 12 июня 2019

Но автоматически созданный уникальный индекс действительно не нужен.

Фактически, УНИКАЛЬНОСТЬ в базе данных Oracle обеспечивается / гарантируется посредством индекса. Вот почему ваши ограничения первичного ключа идут с УНИКАЛЬНЫМ ИНДЕКСОМ.

По Документам

УНИКАЛЬНЫЕ Ключевые ограничения и индексы Oracle применяет уникальные ограничения целостности с помощью индексов.

enter image description here

...