Создание ограничения в Oracle, которое зависит от других столбцов - PullRequest
1 голос
/ 01 августа 2011

Пожалуйста, рассмотрите следующую структуру таблицы в Oracle:

create table DOCS
(
  DOC_NO   NUMBER not null,
  DOC_TYPE VARCHAR2(5) not null,
  PMT_NO   NUMBER not null
);

В этой таблице столбец PMT_NO должен быть уникальным, за исключением случаев, когда DOC_NO одинаково, а DOC_TYPE отличается:

    DOC_NO DOC_TYPE     PMT_NO
---------- -------- ----------
         1 A                10 <-- good
         1 B                10 <-- good, DOC_NO is the same
         2 C                10 <-- NOT good, DOC_NO is different

PMT_NO не может повторяться и не может иметь «дыр» (то есть 1, 2, 3, 5), поэтому последовательность не будет работать. И есть много пользователей, вставляющих данные одновременно.

Есть ли способ создать уникальный ключ / уникальный индекс / индекс на основе функций для этого условия?

Спасибо!

1 Ответ

2 голосов
/ 02 августа 2011

Может быть, это проблема нормализации.

Вы можете вытянуть соответствующий кортеж в другую таблицу, чтобы строка была уникальной.

В этом случае ссылка doc_no на pmt_no, один раз (не так, как вы показали).

Затем вы можете создать уникальный индекс для столбца pmt_no этой таблицы ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...