Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Уникальность по двум полям в разрезе третьего / 19 сообщений из 19, страница 1 из 1
08.12.2016, 13:41
    #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
08.12.2016, 13:51
    #39362535
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность по двум полям в разрезе третьего
Это можно через MV, обновляемому по COMMIT
Работает как отложенный констрейнт
...
Рейтинг: 0 / 0
08.12.2016, 13:55
    #39362541
Новичек2016
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность по двум полям в разрезе третьего
Вячеслав Любомудров,

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

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

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

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

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

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

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

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

Ну хорошо, не хотят они вести справочник.
Но гипотетически, возникла, например, ситуация. Выяснилось, что поле TEST.SIZE_M или TEST.NAME_M заполнено не правильно.
Что должно произойти дальше?
...
Рейтинг: 0 / 0
08.12.2016, 14:35
    #39362581
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность по двум полям в разрезе третьего
Новичек2016Вести огромный справочник не будут.А ты его сам наполняй автоматически.
...
Рейтинг: 0 / 0
08.12.2016, 14:39
    #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
08.12.2016, 14:42
    #39362591
Не понятно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность по двум полям в разрезе третьего
ElicА ты его сам наполняй автоматически.
для начала нужно узнать, что будет делать заказчик с ошибками.
Если заказчик пилевать хотел на ошибки, пусть хранятся, как есть, то тут то ТС и обломится со своим автосправочником.
Кароче, как всегда от постановки задачи многое зависит.
...
Рейтинг: 0 / 0
08.12.2016, 14:44
    #39362594
Не понятно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность по двум полям в разрезе третьего
Новичек2016,

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

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

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

Попробую реализовать автосправочник. Мне кажется, что это подойдет ).
...
Рейтинг: 0 / 0
08.12.2016, 15:28
    #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
08.12.2016, 15:33
    #39362660
Новичек2016
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность по двум полям в разрезе третьего
Не понятно,

Спасибо )
...
Рейтинг: 0 / 0
08.12.2016, 15:37
    #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
08.12.2016, 15:44
    #39362679
Не понятно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность по двум полям в разрезе третьего
AmKad,

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


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