powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сложная проверка на уникальность
25 сообщений из 76, страница 3 из 4
Сложная проверка на уникальность
    #39659116
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

а если экземпляр один то и с блокировкой можно не заморачиваться )

авторА даты в такой модели не заблокировать никак...
даты можно и не блокировать, т.к. обращения к одному объекту уже сериализованы
при низкой конкуренции на один объект вполне себе решение
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659118
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли делать отдельный сервис как промежуточное звено, то это
ещё большее усложнение,
да усложнение, но это, так сказать, вариант на вырост
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659121
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгенийalekcvp,
а если экземпляр один то и с блокировкой можно не заморачиваться )

Пишущих экземпляров где-то 2-5 планируется.
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659122
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, я щас подумал - поскольку таблица брони
всё равно дополнительная к справочнику, то можно
и декларативно, пожалуй (с доп. полем busy/free).

Object Date H1 H2 Status1 Today 08 12 Busy1 Today 12 14 Free1 Today 14 18 (или Null) Busy

H2 - int или timestamp, FK на H1.
UQ - на Object, Date, H1.

Операция брони будет чуть сложнее, чем тупой Insert,
конечно, зато блокировать справочник не придётся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659123
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, тут думать надо! (с)

P.S. В топик призывается Дед. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659124
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp> Пишущих экземпляров где-то 2-5 планируется.

Тю, ради 2-5 заморачиваться и смысла особо нет.
Лочишь и всё, где ж там узкое место-то?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659127
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvphvladСоздай доп таблицу (ID, Value) с уникальностью на оба поля.
Перед вставкой в основную таблицу (например в триггере before insert\update) вставь ID, Value в доп таблицу.
Если удалось - можно обычным селектом проверить наличие конфликтующей маски в основной таблице.
Если не удалось - откат и повтор (или отказ от операции).Дык, в том и дело, что ID и Value могут быть не уникальными.Моя модель этому не противоречит.
Она сводит конкуренцию в доп таблице к разумному минимуму.
У тебя варианты - лочить ID, лочить ID + Value, лочить несколько записей: ID + Value + каждый бит в маске.
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659130
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad> У тебя варианты - лочить

А как тебе вариант с непрерывными интервалами? Слишком муторно? :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659133
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladalekcvpпропущено...
Дык, в том и дело, что ID и Value могут быть не уникальными.Моя модель этому не противоречит.
Она сводит конкуренцию в доп таблице к разумному минимуму.
У тебя варианты - лочить ID, лочить ID + Value, лочить несколько записей: ID + Value + каждый бит в маске.
А, со второго раза дошла идея. Ну, в моём случае проще лочить ID, наверное. Т.к. конкуренция маленькая.
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659138
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамhvlad> У тебя варианты - лочить

А как тебе вариант с непрерывными интервалами? Слишком муторно? :)Если я правильно понял этот вариант, то с точки зрения синхронизации интервалы и маски никак не отличаются.
С точки зрения поиска пересечений - маски проще, интервалы гибче.
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659139
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad> с точки зрения синхронизации интервалы и маски никак не отличаются.

На маску UK не навесишь, а на интервал - можно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659143
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамhvlad> с точки зрения синхронизации интервалы и маски никак не отличаются.

На маску UK не навесишь, а на интервал - можно.Пример давай, посмотрим
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659144
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я же привёл выше. Щас DDL/DML набросаю.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659145
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

где выше ? Я не буду перечитывать 3 страницы в поисках
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659146
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты про это 21482910 , то я не вижу как гарантируется работоспособность при конкурентном доступе
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659150
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, 2 варианта поля использования полей H2/Status:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE BRON (
    OBJ     INTEGER NOT NULL,
    DATA    DATE NOT NULL,
    H1      INTEGER NOT NULL,
    H2      INTEGER,
    STATUS  VARCHAR(20) NOT NULL
);

ALTER TABLE BRON ADD CONSTRAINT UNQ1_BRON UNIQUE (OBJ, DATA, H1);

ALTER TABLE BRON ADD CONSTRAINT FK_BRON_1 FOREIGN KEY (OBJ, DATA, H2) REFERENCES BRON (OBJ, DATA, H1);

-- *********************

INSERT INTO BRON (OBJ, DATA, H1, H2, STATUS) VALUES (1, '10-JUN-2018', 8, 12, 'busy');
INSERT INTO BRON (OBJ, DATA, H1, H2, STATUS) VALUES (1, '10-JUN-2018', 12, 16, 'free');
INSERT INTO BRON (OBJ, DATA, H1, H2, STATUS) VALUES (1, '10-JUN-2018', 16, NULL, 'busy');
INSERT INTO BRON (OBJ, DATA, H1, H2, STATUS) VALUES (2, '11-JUN-2018', 8, 16, 'busy (весь день)');
INSERT INTO BRON (OBJ, DATA, H1, H2, STATUS) VALUES (2, '11-JUN-2018', 16, 16, 'free (как вариант)');


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659151
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad> то я не вижу как гарантируется работоспособность при конкурентном доступе

FK не даст создать запись без "free", а UQ не даст создать дубль.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659153
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя нет, всё равно можно будет вставить запись, если проверять некорректно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659161
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Схема избыточно сложна и не гарантирует отсутствия пересекающихся интервалов.
Код: sql
1.
2.
3.
INSERT INTO BRON (OBJ, DATA, H1, H2, STATUS) VALUES (1, '10-JUN-2018', 8, 12, 'busy');
INSERT INTO BRON (OBJ, DATA, H1, H2, STATUS) VALUES (1, '10-JUN-2018', 12, 16, 'free');
INSERT INTO BRON (OBJ, DATA, H1, H2, STATUS) VALUES (1, '10-JUN-2018', 16, NULL, 'busy');


Ничто не мешает добавить
Код: sql
1.
2.
3.
INSERT INTO BRON (OBJ, DATA, H1, H2, STATUS) VALUES (1, '10-JUN-2018', 11, 12, 'busy');
INSERT INTO BRON (OBJ, DATA, H1, H2, STATUS) VALUES (1, '10-JUN-2018', 10, 12, 'busy');
INSERT INTO BRON (OBJ, DATA, H1, H2, STATUS) VALUES (1, '10-JUN-2018', 9, 12, 'busy');
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659163
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это да, если некорректно проверять, то можно сделать грязь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659167
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку, даже если не делать соотв. проверку в клиенте/процедуре, то что-то вроде

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create or alter trigger bron_biu0 for bron
active before insert or update position 0
as
BEGIN
   IF ((new.status <> 'free') and
      (exists(select 1 from BRON b
              where (b.obj = new.obj) and (b.data = new.data)
                       and (new.h1 between b.h1 and b.h2)
             ))) then
     exception BOOM new.h1;
END



упрощает и эту проблему.
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659169
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Код: sql
1.
and (new.h1 between b.h1 and b.h2)



А где
Код: sql
1.
or (new.h2 between b.h1 and b.h2)

?
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659172
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разумеется, это неполный/неточный код, ибо зависит от реализации.
К примеру, если h2 - нулл, битвин не сработает. Но как раз проверять
надобности, по идее, нет, ибо в нормальной ситуации интервалы
всегда двигаются вправо.

Хотя, если предполагается, что можно забронировать с 2 до 5, а
потом с 8 до 3 - да, нужно будет добавить и это условие. И не только.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659174
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если интервалы бронирования строго часовые, тогда уж на каждый час создавать отдельную запись в таблице бронирования. И индекс без проблем прикручивается.
...
Рейтинг: 0 / 0
Сложная проверка на уникальность
    #39659182
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ещё на первой странице предложили и он
собсно на подобном варианте и остановился.
Но это доп. 8х/24х строк, только для уникальности.

И это щас строго часовые, а потом ситуация
"внезапно" изменится и понадобятся получасы...
Это, видимо, медицина или какой-то сервис
(салоны, парикхмахерские, авто и пр.) - а там
всё возможно, полёт фантазий богатый.
...
Рейтинг: 0 / 0
25 сообщений из 76, страница 3 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сложная проверка на уникальность
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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