powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Уникальность по двум полям в разрезе третьего
19 сообщений из 19, страница 1 из 1
Уникальность по двум полям в разрезе третьего
    #39362527
Новичек2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Поискал, но не нашел. Если проблема уже решалась, то ткните, пожалуйста, где.

Код: plsql
1.
2.
3.
4.
5.
6.
create table TEST
(
  ID_DOC NUMBER(9) not null,
  NAME_M VARCHAR2(100) not null,
  SIZE_M NUMBER(9) not null
)



Подскажите, пожалуйста, как можно сделать следующую поддержку уникальности в таблице при вставке и изменении записи?

Я правильно понимаю, что это можно сделать только триггером?

Правильные записи.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
ID_DOC   NAME_M   SIZE_M
1              w            10
1              w            10
1              w            10

1              z            20
1              z            20
1              z            20

Ошибочные записи.

1              w            11
1              z             21



Спасибо за ответ.
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362535
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это можно через MV, обновляемому по COMMIT
Работает как отложенный констрейнт
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362541
Новичек2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

Спасибо большое! Пошел читать про MATERIALIZED VIEW и отложенные констрейнты
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362543
Новичек2016,

Сделать можно много всего разного и разными способами.
Можно даже хаос автоматизировать.
Правда получится автоматизированный хаос.

Для начала реши, что ты хочешь хранить в таблице, и зачем тебе в ней повторяющиеся записи.
Как поймешь, то может и решение придет оттуда, откуда не ждал.
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362546
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неправильнозачем тебе в ней повторяющиеся записи.Точнее, повторяющиеся поля
Вынести их в отдельный справочник (обеспечив уникальность) и хранить в основной таблице ссылку на него
Так будет проще, чем MV городить
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362554
Вячеслав ЛюбомудровТак будет проще, чем MV городить
Вот так и надо!
Отправить новичка в чащу типа MV, а потом сказать "да не, ты сначала данные нормализовывать поучись".
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362557
Новичек2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

Спасибо огромное за ответы!

Я предлагал заказчику вариант с таким справочником, но так делать он не хочет, к сожалению.

Сочетания NAME_M и SIZE_M всегда (по его утверждению) в разных документах (ID_DOC) будут разными.

Вести огромный справочник не будут.

Отсюда и такой вопрос ((.
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362573
Не понятно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Новичек2016,

Ну хорошо, не хотят они вести справочник.
Но гипотетически, возникла, например, ситуация. Выяснилось, что поле TEST.SIZE_M или TEST.NAME_M заполнено не правильно.
Что должно произойти дальше?
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362581
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новичек2016Вести огромный справочник не будут.А ты его сам наполняй автоматически.
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362588
Новичек2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понятно,

Если я правильно понял Ваш вопрос, то они должны привести все записи NAME_M и SIZE_M к одному виду.

Было

Код: plsql
1.
2.
3.
4.
ID_DOC   NAME_M   SIZE_M
1              w            10
1              w            10
1              w            10



Стало
Код: plsql
1.
2.
3.
4.
ID_DOC   NAME_M   SIZE_M
1              w            11
1              w            11
1              w            11



Если они поменяли значение SIZE_M только в 2-х записях вместо 3 , то сообщение об ошибке.
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362591
Не понятно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicА ты его сам наполняй автоматически.
для начала нужно узнать, что будет делать заказчик с ошибками.
Если заказчик пилевать хотел на ошибки, пусть хранятся, как есть, то тут то ТС и обломится со своим автосправочником.
Кароче, как всегда от постановки задачи многое зависит.
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362594
Не понятно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Новичек2016,

Заказчик сам хочет исправлять свои ошибки в каждой ! записи. Или может довериться твоему автосправочнику?
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362611
Новичек2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понятно,

Будет сам исправлять. Про автосправочник пока речь не шла.
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362641
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новичек2016Будет сам исправлять.Где? Ты же собираешься не дать вставить, а для этого и пригодится автосправочник.
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362651
Новичек2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

Спасибо большое!

Попробую реализовать автосправочник. Мне кажется, что это подойдет ).
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362655
Не понятно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Новичек2016Будет сам исправлять. Про автосправочник пока речь не шла.
тогда вот для поиска ошибок
Код: plsql
1.
2.
3.
select distinct count(distinct size_m) over (partition by ID_DOC, NAME_M) as cnt, t.*
from test t
order by 1 desc, 2, 3

и спроси заказчика про автосправочник
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362660
Новичек2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понятно,

Спасибо )
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362666
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понятно
Код: plsql
1.
2.
3.
select distinct count(distinct size_m) over (partition by ID_DOC, NAME_M) as cnt, t.*
from test t
order by 1 desc, 2, 3


Distinct поверх аналитики для поиска дублей - это круто.
...
Рейтинг: 0 / 0
Уникальность по двум полям в разрезе третьего
    #39362679
Не понятно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKad,

Гы-гы. а вот и не угадал. тут ищутся не дубли, а расхождения.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Уникальность по двум полям в разрезе третьего
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]