|
Уникальность в нестандартной ситуации
|
|||
---|---|---|---|
#18+
Добрый день! В базе необходимо хранить версии продуктов, которые состоят из набора UPC. Поскольку каждый UPC обладает довольно сложным составом, объемом, а меняются они не очень часто сейчас реализована схема с тремя таблицами - продукты, UPC и связь много ко многим, т.е. в случае когда UPC не меняется, в новую версию продукта добавляется просто новая ссылка на старый. При этом требуется, чтобы одному продукту(версии) соответствовали upc с разным полем num. Сейчас проверка реализована только в приложении. Какие есть варианты реализовать данное ограничение в БД? Спасибо заранее! Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2021, 12:19 |
|
Уникальность в нестандартной ситуации
|
|||
---|---|---|---|
#18+
Alex2001 object_id object_ - не нужен, сбивает с толку. Alex2001 Какие есть варианты реализовать данное ограничение в БД? Триггеры на product_upcs, которые будут делать запрос с группировкой на каждую вставку/апдейт ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2021, 12:53 |
|
Уникальность в нестандартной ситуации
|
|||
---|---|---|---|
#18+
object_id в таблице product_upcs и правда лишнее. Никакой полезной нагрузки не несёт. (Кстати, называть разные сущности одинаковыми именами не только моветон, но и просто странно - фиг разберёшься...) Сама задача не очень понятна по описанию. Но если в кросс-таблице не нужны дубли (а это обычная практика), достаточно поставить UNIQUE CONSTRAINT сразу на 2 поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2021, 20:10 |
|
Уникальность в нестандартной ситуации
|
|||
---|---|---|---|
#18+
Правильный Вася, Есть таблица А с (id, n) и таблица Б с (id, group_id, a_id). Надо чтобы в рамках одной group_id не было записей из A с одинаковым n. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2021, 03:44 |
|
Уникальность в нестандартной ситуации
|
|||
---|---|---|---|
#18+
Значит, UNIQUE на 2 поля, как я и говорил. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2021, 15:57 |
|
Уникальность в нестандартной ситуации
|
|||
---|---|---|---|
#18+
Правильный Вася Значит, UNIQUE на 2 поля, как я и говорил. Маловато. Либо PK на два поля, либо UK на них же +not null на каждое из ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2021, 17:23 |
|
Уникальность в нестандартной ситуации
|
|||
---|---|---|---|
#18+
andrey_anonymous, сильно зависит от предметной области. Может, там допускаются null в каких-то случаях. Может, только на одно поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2021, 18:03 |
|
Уникальность в нестандартной ситуации
|
|||
---|---|---|---|
#18+
Правильный Вася andrey_anonymous, сильно зависит от предметной области. UK+nullable позволяет дубли для записей, содержащих null в одном из компонентов ключа - в означенной предметной области это косяк. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2021, 18:08 |
|
Уникальность в нестандартной ситуации
|
|||
---|---|---|---|
#18+
andrey_anonymous, это не есть правда. Цитирую мануал:To satisfy a composite unique key, no two rows in the table or view can have the same combination of values in the key columns. Any row that contains nulls in all key columns automatically satisfies the constraint. However, two rows that contain nulls for one or more key columns and the same combination of values for the other key columns violate the constraint . ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2021, 01:18 |
|
Уникальность в нестандартной ситуации
|
|||
---|---|---|---|
#18+
Правильный Вася Значит, UNIQUE на 2 поля, как я и говорил. На какие? A.n и Б.group_id ? А так можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2021, 12:01 |
|
Уникальность в нестандартной ситуации
|
|||
---|---|---|---|
#18+
crutchmaster Правильный Вася Значит, UNIQUE на 2 поля, как я и говорил. На какие? A.n и Б.group_id ? А так можно? Только добавив N в Б + PK(ID) и UK(ID,N) в A + FK(ID,N) и UK(GROUP_ID,N) в Б SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2021, 13:35 |
|
Уникальность в нестандартной ситуации
|
|||
---|---|---|---|
#18+
Если уникальность нужно "собрать" из нескольких таблиц, можно использовать мат.представление с fast refresh on commit и уникальным индексом. Как плюс - не надо модифицировать таблицы, делать триггеры, или как-то по другому обновлять поле. Как минус - уникальность будет проверяться на коммите (а не в момент insert или update), это может быть критичным. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 00:31 |
|
|
start [/forum/topic.php?fid=52&msg=40060250&tid=1880307]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
129ms |
get topic data: |
14ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 225ms |
0 / 0 |