powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Уникальность в нестандартной ситуации
12 сообщений из 12, страница 1 из 1
Уникальность в нестандартной ситуации
    #40060106
Alex2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
В базе необходимо хранить версии продуктов, которые состоят из набора UPC. Поскольку каждый UPC обладает довольно сложным составом, объемом, а меняются они не очень часто сейчас реализована схема с тремя таблицами - продукты, UPC и связь много ко многим, т.е. в случае когда UPC не меняется, в новую версию продукта добавляется просто новая ссылка на старый. При этом требуется, чтобы одному продукту(версии) соответствовали upc с разным полем num. Сейчас проверка реализована только в приложении. Какие есть варианты реализовать данное ограничение в БД? Спасибо заранее!
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE products
(
    object_id           VARCHAR(255) PRIMARY KEY,
    version               INTEGER NOT NULL
);
CREATE TABLE product_upcs
(
    object_id            VARCHAR(255) PRIMARY KEY,
    upc_object_id     VARCHAR(255),
    product_id          VARCHAR(255)
);
CREATE TABLE upcs
(
    object_id            VARCHAR(255) PRIMARY KEY,
    num                   INTEGER NOT NULL
...
Рейтинг: 0 / 0
Уникальность в нестандартной ситуации
    #40060125
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2001
object_id

object_ - не нужен, сбивает с толку.

Alex2001
Какие есть варианты реализовать данное ограничение в БД?

Триггеры на product_upcs, которые будут делать запрос с группировкой на каждую вставку/апдейт
...
Рейтинг: 0 / 0
Уникальность в нестандартной ситуации
    #40060217
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
object_id в таблице product_upcs и правда лишнее. Никакой полезной нагрузки не несёт.
(Кстати, называть разные сущности одинаковыми именами не только моветон, но и просто странно - фиг разберёшься...)

Сама задача не очень понятна по описанию.
Но если в кросс-таблице не нужны дубли (а это обычная практика), достаточно поставить UNIQUE CONSTRAINT сразу на 2 поля.
...
Рейтинг: 0 / 0
Уникальность в нестандартной ситуации
    #40060250
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася,

Есть таблица А с (id, n) и таблица Б с (id, group_id, a_id). Надо чтобы в рамках одной group_id не было записей из A с одинаковым n.
...
Рейтинг: 0 / 0
Уникальность в нестандартной ситуации
    #40060411
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит, UNIQUE на 2 поля, как я и говорил.
...
Рейтинг: 0 / 0
Уникальность в нестандартной ситуации
    #40060462
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася
Значит, UNIQUE на 2 поля, как я и говорил.

Маловато.
Либо PK на два поля, либо UK на них же +not null на каждое из
...
Рейтинг: 0 / 0
Уникальность в нестандартной ситуации
    #40060479
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,
сильно зависит от предметной области.
Может, там допускаются null в каких-то случаях. Может, только на одно поле.
...
Рейтинг: 0 / 0
Уникальность в нестандартной ситуации
    #40060486
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася
andrey_anonymous,
сильно зависит от предметной области.

UK+nullable позволяет дубли для записей, содержащих null в одном из компонентов ключа - в означенной предметной области это косяк.
...
Рейтинг: 0 / 0
Уникальность в нестандартной ситуации
    #40060560
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 .
...
Рейтинг: 0 / 0
Уникальность в нестандартной ситуации
    #40060642
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася
Значит, UNIQUE на 2 поля, как я и говорил.

На какие? A.n и Б.group_id ? А так можно?
...
Рейтинг: 0 / 0
Уникальность в нестандартной ситуации
    #40060683
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Правильный Вася
Значит, UNIQUE на 2 поля, как я и говорил.

На какие? A.n и Б.group_id ? А так можно?


Только добавив N в Б + PK(ID) и UK(ID,N) в A + FK(ID,N) и UK(GROUP_ID,N) в Б

SY.
...
Рейтинг: 0 / 0
Уникальность в нестандартной ситуации
    #40060862
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если уникальность нужно "собрать" из нескольких таблиц, можно использовать мат.представление с fast refresh on commit и уникальным индексом.
Как плюс - не надо модифицировать таблицы, делать триггеры, или как-то по другому обновлять поле.
Как минус - уникальность будет проверяться на коммите (а не в момент insert или update), это может быть критичным.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Уникальность в нестандартной ситуации
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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