powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как обеспечить частичную уникальность ?
98 сообщений из 98, показаны все 4 страниц
Как обеспечить частичную уникальность ?
    #39822114
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Такая задача: есть пользователи, им выдаются некоторые бонусы. Пользователь может активировать бонус, т.е. у бонуса есть статус.
И есть нюанс - у каждого пользователя активным может быть только один бонус. Далее активный бонус либо отменяется, либо используется, т.е. в дальнейшем статус его изменяется либо по решению пользователя, либо после срабатываения некоторых условий.

Как сделать такое ограничение в базе ?

Идеально быть бы сделать partial index , как у конкурентов:
Код: sql
1.
create unique index some_index on bonus (user_id) where status = 'active'



Но у нас такого нет, увы.
Есть CORE-3384 , но там как-то бесперспективно всё.

Просматривается 2 некрасивых решения:
1. Завести отдельную табличку active_bonuses, обеспечивать уникальность с ее помощью.
2. Сделать вычисляемое (в триггере) поле uniq_status, что-то типа case when status = 'active' then status end, и повесить уник на (user_id, uniq_status)

Оба решения не нравятся, потому что требуют заводить какие-то дополнительные объекты, являющиеся, по сути, костылями.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822144
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба Мастеркеевич,

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

Код: sql
1.
2.
CREATE UNIQUE INDEX UNQ_BONUS_USER 
ON BONUS COMPUTED BY (CASE WHEN STATUS = 'active' THEN user_id END);
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822145
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба Мастеркеевич,

Оно ?
Код: sql
1.
create unique index some_index on bonus computed by (case when status = 'active' then user_id end)
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822147
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

:)
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822167
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точно, есть же computed by. Забыл. Спасибо :)
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822184
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба Мастеркеевич,

А что, история статусов никому не интересна?
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822301
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создаешь таблицу с двумя полями - "user_id" и "bonus_id" по полю "user_id" делаешь первичный ключ, оба поля внешним ключом к соответствующим справочникам пользователей и бонусов И ВСЁ! Больше тебе ничего не надо, потому как одному пользователю ты сможешь привязать лишь один бонус. Ну и, как уже упомянул ДикийСерж, хорошо бы добавить историю, то есть в первичный ключ добавить ещё и TIMESTAMP.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822309
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
04.06.2019 14:12, rdb_dev пишет:
> в первичный ключ добавить ещё и TIMESTAMP.

и положение звёзд на небосводе.
первичный ключ в который добавлен ещё и TIMESTAMP вырождается в банальный пшшшшшик.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822337
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийпервичный ключ в который добавлен ещё и TIMESTAMP вырождается в банальный пшшшшшик.Похоже, сегодня за обедом ты съел что-то несвежее...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE TABLE "active_bonus"
(
    "tmstmp"    TMSTMP NOT NULL,
    "user_id"   ID NOT NULL,
    "bonus_id"  ID NOT NULL,
  CONSTRAINT "active_bonus__pk" PRIMARY KEY ("user_id", "tmstmp")
);

INSERT INTO "active_bonus" ("tmstmp", "user_id", "bonus_id")
        SELECT CURRENT_TIMESTAMP-10, 1, 4 FROM oneRow
  UNION SELECT CURRENT_TIMESTAMP-2, 2, 3 FROM oneRow
  UNION SELECT CURRENT_TIMESTAMP-5, 2, 8 FROM oneRow
  UNION SELECT CURRENT_TIMESTAMP-20, 3, 8 FROM oneRow
  UNION SELECT CURRENT_TIMESTAMP-3, 3, 3 FROM oneRow
  UNION SELECT CURRENT_TIMESTAMP-9, 3, 4 FROM oneRow;

WITH "last" AS
(
  SELECT "user_id", Max("tmstmp") AS "tmstmp"
    FROM "active_bonus"
    GROUP BY "user_id"
)
SELECT ab."user_id", ab."bonus_id", ab."tmstmp"
  FROM "active_bonus" ab
    INNER JOIN "last" l
      ON l."user_id" = ab."user_id" AND l."tmstmp" = ab."tmstmp"
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822343
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Определись уже, как
rdb_devкак одному пользователю ты сможешь привязать лишь один бонус
связано с
rdb_dev
Код: plsql
1.
2.
3.
INSERT INTO "active_bonus" ("tmstmp", "user_id", "bonus_id")
      SELECT CURRENT_TIMESTAMP-2, 2, 3 FROM oneRow
  UNION SELECT CURRENT_TIMESTAMP-5, 2, 8 FROM oneRow
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822347
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, последний по времени бонус и есть активный.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822353
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

тему топика читал ? Прочитай.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822357
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, и чо? Там нагородили огород с полем "status", которое прекрасно и в соответствии с требованиями заменяется таблицей, т.е. последний по времени бонус пользователя имеет статус активный, остальные - неактивный. Если кого-то не устраивает представление данных, можно построить вьюху с вычисляемым значением поля "status". В чём проблема?
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822375
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devВ чём проблема?Всё прекрасно, фантазируй дальше, я - пас
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822398
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladrdb_devВ чём проблема?Всё прекрасно, фантазируй дальше, я - пасДа ёлки-палки!...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR ALTER VIEW "bonus"
AS
WITH "last" AS
(
  SELECT "user_id", Max("tmstmp") AS "tmstmp"
    FROM "active_bonus"
    GROUP BY "user_id"
)
SELECT ab."user_id", ab."bonus_id",
    Iif(l."user_id" IS NULL, _ASCII 'inactive', _ASCII 'active') AS "status"
  FROM "active_bonus" ab
    LEFT JOIN "last" l
      ON l."user_id" = ab."user_id" AND l."tmstmp" = ab."tmstmp"
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822410
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
04.06.2019 15:16, rdb_dev пишет:
> CONSTRAINT "active_bonus__pk" PRIMARY KEY ("user_id", "tmstmp")

синтаксический нонсенс.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822418
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий04.06.2019 15:16, rdb_dev пишет:
> CONSTRAINT "active_bonus__pk" PRIMARY KEY ("user_id", "tmstmp")

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

запрета нет. Есть вопрос целесообразности и удобства. Составные как и натуральные PK не удобны априори, если уж надо сделать такое ограничение, то обычно ставят UNIQUE в довесок к суррогатному PK
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822433
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devДа ёлки-палки!...Ты забыл цель - обеспечить уникальность.
Ты её не обеспечиваешь.
Вместо этого продаёшь историю, о которой никто не просил.
Направь свою энергию на что-нить полезное уже

PS И - да - таймстамп в PK - это обычно от глупости и не понимания сути задачи.
Примерно как и double precision в там же.
Не всегда, но чаще всего.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822434
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисrdb_dev,

запрета нет. Есть вопрос целесообразности и удобства. Составные как и натуральные PK не удобны априори, если уж надо сделать такое ограничение, то обычно ставят UNIQUE в довесок к суррогатному PKСоставные ПК не удобны, когда таблица не является конечно в иерархии отношений, а если таблица конечна, вполне можно воспользоваться принципом бритвы Оккама и не порождать сущности без надобности.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822435
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladПримерно как и double precision в там же.

Timestamp хотя бы целый в отличии от.

PS: Тупо добавить поле "текущий бонус" в таблицу пользователей не предлагали или я не заметил?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822456
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТы забыл цель - обеспечить уникальность.
Ты её не обеспечиваешь.Именно упомянутую уникальность я и обеспечиваю!
Условие таково - "у пользователя не может быть более двух активных бонусов одномоментно" и составной ПК по полям "user_id"+"tmstmp" вполне обеспечивает это условие, так как ты не сможешь для одного и того же пользователя добавить в таблицу две записи с разными бонусами, но с одним и тем же штампом времени.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822466
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

ну да, не сможешь. У тебя мало опыта реальной работы реальных юзеров.
В реальных приложениях.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822467
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, ты хочешь сказать, что для таблицы:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE "active_bonus"
(
    "tmstmp"    TMSTMP NOT NULL,
    "user_id"   ID NOT NULL,
    "bonus_id"  ID NOT NULL,
  CONSTRAINT "active_bonus__pk" PRIMARY KEY ("user_id", "tmstmp")
);

Сервер FirebirdSQL не обеспечить уникальность составного ПК? Тогда тут дело совсем не в пользователях...
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822468
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
04.06.2019 18:51, rdb_dev пишет:
> Сервер FirebirdSQL не обеспечить уникальность составного ПК?
> Тогда тут дело совсем не в пользователях...

угу.
тут дело в "дизайнере".
ибо уникальность именно ЭТОГО ключа не несёт никакой смысловой нагрузки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822472
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийибо уникальность именно ЭТОГО ключа не несёт никакой смысловой нагрузки.
Именно в этой уникальности как раз вся "смысловая нагрузка", для обеспечения условия "у пользователя не может быть более двух активных бонусов одномоментно" с бонусом в виде побочного эффекта хранения истории активации бонусов.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822490
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

продолжай монолог
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822518
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devhvlad, ты хочешь сказать, что для таблицы:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE "active_bonus"
(
    "tmstmp"    TMSTMP NOT NULL,
    "user_id"   ID NOT NULL,
    "bonus_id"  ID NOT NULL,
  CONSTRAINT "active_bonus__pk" PRIMARY KEY ("user_id", "tmstmp")
);

Сервер FirebirdSQL не обеспечить уникальность составного ПК? Тогда тут дело совсем не в пользователях...

Дело не в сервере Firebird. Дело в устройстве Мироздания. И составной, не составной - рояли не играет.

https://yandex.ru/images/search?text=дискретность времени&stype=image&lr=2&source=wiz

Кстати, когда-то, когда был молод и глуп, в смысле лет эдак сорока, наступил на violation timestamp-PK в архиве примерно через месяц после его создания. И всего-то при паре десятков пользователей.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822520
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкакогда-то, когда был молод и глуп, в смысле лет эдак сорока, наступил на violation
timestamp-PK в архиве примерно через месяц после его создания.

"В те времена далёкие, теперь почти былинные" current_timestamp был с точностью в целые
секунды и никто не умел работать с их долями. К счастью, сейчас такие нубы уже перевелись.
Наверное.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822525
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба МастеркеевичОба решения не нравятся, потому что требуют заводить какие-то дополнительные объекты, являющиеся, по сути, костылями.

При активизации любого бонуса у юзера сброс молча в inactive предыдущего его активного в before триггерах по бизнес-логике не прокатывает?
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822527
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov"В те времена далёкие, теперь почти былинные" current_timestamp был с точностью в целые
секунды и никто не умел работать с их долями.


Да ладно. Или ты Абрамс вспомнил? Уже в IB4 точно с миллисекундами был. А вот родной его WISQL их не отображал просто, это факт.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822548
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаУже в IB4 точно с миллисекундами был.

Тип-то всегда был с четырьмя знаками после точки, а вот помянутая контекстная переменная
такого не умела, как и подавляющее большинство компонент доступа.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822587
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devМимопроходящийибо уникальность именно ЭТОГО ключа не несёт никакой смысловой нагрузки.
Именно в этой уникальности как раз вся "смысловая нагрузка", для обеспечения условия "у пользователя не может быть более двух активных бонусов одномоментно"

А одномоментно - это как?
А если в соседнюю милисекунду - это уже не одномоментно и допускается?
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822615
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаю ветку и ... в недоумении.
Уникальность индексами здесь вообще не нужна. Одновременная в рамках действия транзакции вставка двух бонусов превращается только в головную боль, но никаких бонусов не даёт.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822659
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вы тут накидали, стоило отойти ненадолго ... :))

Уникальность нужна только для активного бонуса. Неактивных, например, выданных пользователю, но не активированных им, может быть сколько угодно. В том числе и при наличии активного.

Старый плюшевый мишкаСисдба МастеркеевичОба решения не нравятся, потому что требуют заводить какие-то дополнительные объекты, являющиеся, по сути, костылями.

При активизации любого бонуса у юзера сброс молча в inactive предыдущего его активного в before триггерах по бизнес-логике не прокатывает?
Триггеры не помогут, ибо тимлид их не любит, поэтому у нас их нет. Вообще. Как и процедур.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822663
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба МастеркеевичТриггеры не помогут, ибо тимлид их не любит, поэтому у нас их нет. Вообще. Как и процедур.Каким образом тогда активируется бонус? Кто деактивирует предыдущий активный?
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822664
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба МастеркеевичТриггеры не помогут, ибо тимлид их не любит, поэтому у нас их нет. Вообще. Как и процедур.

Вся логика на клиенте? Зачем тогда париться насчёт этого хитрого индекса?
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822757
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба МастеркеевичУникальность нужна только для активного бонуса.

Повторяю медленно: в чём проблема сделать этот бонус полем в таблице пользователей?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822767
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба МастеркеевичТриггеры не помогут, ибо тимлид их не любит, поэтому у нас их нет. Вообще. Как и процедур.

Аааа... Бег в мешках с барьерами по подвесной проволоке? Уважаю. Почти. Ибо индексы он таки любит, прослабел. Самурай без меча подобен самураю с мечом, но только без меча.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822807
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryЧитаю ветку и ... в недоумении.
Уникальность индексами здесь вообще не нужна. Одновременная в рамках действия транзакции вставка двух бонусов превращается только в головную боль, но никаких бонусов не даёт.В таком случае у меня возникает несколько вопросов:
1. Кто будет одномоментно с двух разных АРМов активировать бонус одному и тому же пользователю, а главное - по какому событию?
2. Если, всё же, два оператора АРМа умудрились одномоментно - в одноу и ту же миллисекунду запустить транзакции на активацию бонуса для конкретного пользователя, и оператор-неудачик получил от сервера отлуп о дублировании уникального индекса, то это тут же становится головной болью разработчика/администратора БД или, всё же, это штатное поведение системы, адекватно воспринимаемое обученным оператором?
3. Если бонус активирует сам пользователь через веб-интерфейс, то как он одномоментно - с точностью до миллисекунды нажмёт рядом с бонусом кнопку "активировать" с двух разных веб-страниц?
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822811
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСисдба МастеркеевичУникальность нужна только для активного бонуса.

Повторяю медленно: в чём проблема сделать этот бонус полем в таблице пользователей?

Похоже на денормализацию. Тимлид не одобрит.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822820
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIПохоже на денормализацию. Тимлид не одобрит.

Никакой денормализации. Текущий бонус - атрибут клиента, ссылка на таблицу бонусов. Все
три НФ удовлетворённо кивают.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822821
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devВ таком случае у меня возникает несколько вопросов:
1. Кто будет одномоментно с двух разных АРМов активировать бонус одному и тому же пользователю, а главное - по какому событию?
2. Если, всё же, два оператора АРМа умудрились одномоментно - в одноу и ту же миллисекунду запустить транзакции на активацию бонуса для конкретного пользователя, и оператор-неудачик получил от сервера отлуп о дублировании уникального индекса, то это тут же становится головной болью разработчика/администратора БД или, всё же, это штатное поведение системы, адекватно воспринимаемое обученным оператором?
3. Если бонус активирует сам пользователь через веб-интерфейс, то как он одномоментно - с точностью до миллисекунды нажмёт рядом с бонусом кнопку "активировать" с двух разных веб-страниц?Эти вопросы нужно было задавать до того, как предлагать ерунду, и уж точно до того, как её отстаивать.

1. Не твоё дело. Absolutely. Если физическая возможность есть, ею воспользуются.
2. С какого перепугу ты решил, что последняя по времени ввода запись является правильной ?
С чего ты взял, что для повторной активации ранее введённого и ныне неактивного бонуса, его нужно ввести заново (и удалить старую запись, убив часть истории, которую ты тут так сильно хочешь) ?
3. См п1 и п2

Я уже писал, что у тебя нет реального опыта работы в реальных условиях ?
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822824
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я не умею так культурно и без матов...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822830
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба МастеркеевичНу вы тут накидали, стоило отойти ненадолго ... :))

Уникальность нужна только для активного бонуса. Неактивных, например, выданных пользователю, но не активированных им, может быть сколько угодно. В том числе и при наличии активного.


Я тебе за бонусы еще один умный вещь скажу.

Завтра придут и потребуют сроки протухания бонусов. Как активированных, так и неактивированных.
А послезавтра - сроки начала активации оных.

И еще вчера - текущее сальдо этих самых бонусов.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822846
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladЭти вопросы нужно было задавать до того, как предлагать ерунду, и уж точно до того, как её отстаивать.

1. Не твоё дело. Absolutely. Если физическая возможность есть, ею воспользуются.И пусть пользуются! Это как-то негативно повлияет на работу сервера FirebirdSQL в целом - приведёт к его нештатной работе или падению? Или это как-то нарушит бизнес логику процесса?

hvlad2. С какого перепугу ты решил, что последняя по времени ввода запись является правильной ?Это будет решать оператор или пользователь, который захочет активировать бонус из того набора бонусов пользователя, что хранится в отдельной справочной таблице, а не в таблице " active _bonus".

hvladС чего ты взял, что для повторной активации ранее введённого и ныне неактивного бонуса, его нужно ввести заново (и удалить старую запись, убив часть истории, которую ты тут так сильно хочешь) ?С чего ты взял, что для повторной активации ранее деактивированного бонуса нужно что-то удалять в таблице "active_bonus"? Ограничение ПК вполне позволит добавить тот же "bonus_id" тому же "user_id", которые уже существуют в таблице "active_bonus", но с другим штампом времени.

hvlad3. См п1 и п2
Я уже писал, что у тебя нет реального опыта работы в реальных условиях ?На заборах тоже часто пишут совершенно необоснованные утверждения.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822851
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastorИ еще вчера - текущее сальдо этих самых бонусов.Причём, отчётом на произвольный временной интервал.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822857
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devhvlad1. Не твоё дело. Absolutely. Если физическая возможность есть, ею воспользуются.И пусть пользуются! Это как-то негативно повлияет на работу сервера FirebirdSQL в целом - приведёт к его нештатной работе или падению? Или это как-то нарушит бизнес логику процесса?Намёки на падения сервера засунь себе в ...карму.
Насчёт бизнес логики - твоё предложение её вообще не позволяет соблюсти.
Ибо "кто последний ввёл - того и тапки" - вот и вся твоя "бизнес логика".

rdb_devhvladС чего ты взял, что для повторной активации ранее введённого и ныне неактивного бонуса, его нужно ввести заново (и удалить старую запись, убив часть истории, которую ты тут так сильно хочешь) ?С чего ты взял, что для повторной активации ранее деактивированного бонуса нужно что-то удалять в таблице "active_bonus"? На первую часть вопроса ответа нет ?
Про удаление записи я поторопился, согласен.

rdb_devhvladЯ уже писал, что у тебя нет реального опыта работы в реальных условиях ?На заборах тоже часто пишут совершенно необоснованные утверждения.Ну так тут не забор (вроде) - хватит уже.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822858
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСисдба МастеркеевичУникальность нужна только для активного бонуса.

Повторяю медленно: в чём проблема сделать этот бонус полем в таблице пользователей?
Можно туда просто ссылку пихать на бонус. Какой запихан - тот и активен.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822864
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийа я не умею так культурно и без матов...Даже в такой, казалось бы, пустой теме есть чему (и у кого) поучиться. :) Держись, матом не надо!
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822870
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladНамёки на падения сервера засунь себе в ...карму.Какие ещё "намёки на падение сервера"? Отлуп при дублировании значения ПК, это вполне штатная ситуация для СУБД.
hvladНасчёт бизнес логики - твоё предложение её вообще не позволяет соблюсти.
Ибо "кто последний ввёл - того и тапки" - вот и вся твоя "бизнес логика".А тот, кто последним активировал какой-то бонус, выставив в статус 'active' и переведя все прочие бонусы пользователя в статус 'inactive', тапки не надел? Хоть как-нибудь обоснуй своё утверждение - "твоё предложение её вообще не позволяет соблюсти".
Моё предложение вполне корректно реализует бизнес логику процесса, достаточно лишь прикрутишь триггер на вставку записи в таблицу "active_bonus", который задаст значение штампа времени сервера СУБД полю "tmstmp".
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822906
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryСисдба МастеркеевичТриггеры не помогут, ибо тимлид их не любит, поэтому у нас их нет. Вообще. Как и процедур.Каким образом тогда активируется бонус? Кто деактивирует предыдущий активный?По сути сам пользователь. У него спрашивают, типа "у тебя уже есть активный бонус, активируешь новый - убьешь старый, готов ?", ну и "внутри" потом сначала деактив старого, потом актив нового.


KreatorXXIСисдба МастеркеевичТриггеры не помогут, ибо тимлид их не любит, поэтому у нас их нет. Вообще. Как и процедур.

Вся логика на клиенте? Зачем тогда париться насчёт этого хитрого индекса?Чтобы в базу нельзя было засунуть непотребное.


Dimitry SibiryakovСисдба МастеркеевичУникальность нужна только для активного бонуса.

Повторяю медленно: в чём проблема сделать этот бонус полем в таблице пользователей?Мысль понятна. Только не в пользователей, а в аккаунты (я "забыл" упомянуть о них, для упрощения описания задачи), ибо у пользователей есть аккаунты, для каждой поддерживаемой валюты. Кроме того, это не решит исходную проблему - т.е. не обеспечит единственность бонуса в статусе "активный".


Старый плюшевый мишкаСисдба МастеркеевичТриггеры не помогут, ибо тимлид их не любит, поэтому у нас их нет. Вообще. Как и процедур.

Аааа... Бег в мешках с барьерами по подвесной проволоке? Уважаю. Почти. Ибо индексы он таки любит, прослабел. Самурай без меча подобен самураю с мечом, но только без меча.Целиком и полностью разделяю и поддерживаю :) Но есть некие реалии, с которыми приходится считаться.

pastorСисдба МастеркеевичНу вы тут накидали, стоило отойти ненадолго ... :))

Уникальность нужна только для активного бонуса. Неактивных, например, выданных пользователю, но не активированных им, может быть сколько угодно. В том числе и при наличии активного.


Я тебе за бонусы еще один умный вещь скажу.

Завтра придут и потребуют сроки протухания бонусов. Как активированных, так и неактивированных.
А послезавтра - сроки начала активации оных.

И еще вчера - текущее сальдо этих самых бонусов.Всех соломок не постелить, это понятно.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822912
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.06.2019 15:37, Сисдба Мастеркеевич пишет:
> у пользователей есть аккаунты, для каждой поддерживаемой валюты.

очень странное решение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39822916
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба Мастеркеевичэто не решит исходную проблему - т.е. не обеспечит единственность бонуса в статусе "активный".

"чо?" (с)
Ты каким-то магическим образом сумеешь запихать в поле "активный бонус" ссылку сразу на
два бонуса? Тут уже первая НФ начнёт курить в углу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823001
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, если в аккаунты пихнуть активный бонус. Этих аккаунтов у одного пользователя много. Наверно, вот откуда плясать надо.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823007
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСисдба МастеркеевичУникальность нужна только для активного бонуса.

Повторяю медленно: в чём проблема сделать этот бонус полем в таблице пользователей?


Что будем делать с целочной ссылостностью в случае необонусявленного пользователя?

да помню я, помню про бонус типа "не определён"
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823032
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devМоё предложение вполне корректно реализует бизнес логику процесса, достаточно лишь прикрутишь триггер на вставку записи в таблицу "active_bonus", который задаст значение штампа времени сервера СУБД полю "tmstmp".

Таймштамп Бонус Дата начала действия

Когда-то давно Нумер 1 21.09.1954

Позавчера Нумер 2 01.01.2019 Путин велел

Сегодня Всё отменить 08.02.2022

Ы? Какой у нас нынче активный по бизнесь логике? А Первого Апрэля текущего году?
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823056
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаЧто будем делать с целочной ссылостностью в случае необонусявленного пользователя?
Запишем Дейта в старые маразматики и объявим это поле NULL.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823108
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба Мастеркеевич > Триггеры ... тимлид их не любит, поэтому у нас их нет. Вообще. Как и процедур.

Сорри, не мог пройти мимо...

А вы часом никаком ORMом не пользуетесь?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823110
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийСисдба Мастеркеевич > у пользователей есть аккаунты, для каждой поддерживаемой валюты.

очень странное решение.
Это вообще нетривиальная задача, до сих пор
универсальных хороший решений не встречал
(и с удовольствием почитал бы чужой опыт на
эту тему - в виде статьи или в свободном стиле).

Самое распространенное - вести таблицу курсов
валют и танцевать вокруг при их нестыковках

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

у ТС какие-то аккаунты. ХЗ. Реально к валюте могут опосредованно относится.
Почти по теме. Я клиент Сбера. Вчера случилась маленькая коллизия. У меня один номер мобильного и несколько карт. Перевели деньги по мобильному. Они упали на последнюю оформленную. Буду разбираться. Есть ли возможность сделать карту "активной" для перевода по мобильному?
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823285
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про Ж сбера в "работе" есть долгоиграющий топик.
начало положено в 2011, если не ошибаюсь.
по сей день топик активно дополняется...
(если не грохнули сгоряча)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823301
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

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

у ТС какие-то аккаунты. ХЗ. Реально к валюте могут опосредованно относится.
Почти по теме. Я клиент Сбера. Вчера случилась маленькая коллизия. У меня один номер мобильного и несколько карт. Перевели деньги по мобильному. Они упали на последнюю оформленную. Буду разбираться. Есть ли возможность сделать карту "активной" для перевода по мобильному?Не карту, а счёт в банке. Карта - это кусочек пластика, денег не содержит.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823315
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.06.2019 10:53, Симонов Денис пишет:
> так Греф же сказал что программисты не нужны

там очень хитровыпитая схема.
они создали дочернюю структуру "сбер-тех" и вывели всех программистов туда.
5 тыщ крепостных душ.

вообще, очень познавательное чтиво...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823317
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.06.2019 11:15, WildSery пишет:
> Не карту, а счёт в банке. Карта - это кусочек пластика, денег не содержит.

сберовским СЕО-шникам этого у-вы не объяснить...
вот переводишь ты деньги "на карту".
карта привязана к счёту, естессно.
деньги пришли "на карту".
а на счёте их НЕТ ещё в течение 3-4 дней!!!
сиди и жди, пока они "упадут на счёт".
сцуко...

цитируя Лаврова: дИбилы, плять!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823329
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийдИбилы, плять!Пацаны сидели, думали и придумали как безнаказанно трое суток крутить деньги холопов в свою пользу, а ты тут контору палишь!
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823333
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.06.2019 11:38, Ivan_Pisarevsky пишет:
> Пацаны сидели, думали и придумали как безнаказанно трое суток крутить деньги холопов в свою пользу, а ты тут контору палишь!

ну знач не дИбилы, а петоразы.
в хорошем смысле! (С)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823336
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

Да это давно известно. Не только в сбере, но по-моему, во всех госбанках так.
ВТБ24, например. При переводе на счёт "ваши деньги поступили, но пока недоступны".
А если не нравится - идите в справедливый советский суд.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823342
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

перевели не на счёт и не на карту, а на номер мобильного телефона. Если речь обо мне. Счетов у меня ещё больше, чем карт. Но, похоже, сбер просто счета без карт не рассматривает для перевода по мобиле.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823362
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамМимопроходящийСисдба Мастеркеевич > у пользователей есть аккаунты, для каждой поддерживаемой валюты.

очень странное решение.
Это вообще нетривиальная задача, до сих пор
универсальных хороший решений не встречал
(и с удовольствием почитал бы чужой опыт на
эту тему - в виде статьи или в свободном стиле).

Самое распространенное - вести таблицу курсов
валют и танцевать вокруг при их нестыковках

Сорри за оффтоп.


чего тут нетривиального?
есть один лицевой счет пользователя, туда приходят рубли, бонусы, тэнге.
сальдо по каждой валюте (субсчетам).
некоторые валюты с прибабахами (то еще не действительны, то уже недействительны)

и списываются соответственно. хочешь платить тэнге, а есть только рубли? конвертируй по курсу на момент операции, списывай тэнге, начисляй рубли.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823374
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastorчего тут нетривиального?

Например, проведение курсовой маржи по налоговому учёту.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823415
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

ВТБ прошлым летом классно выступил. Была у меня иха карта дебетовая. Вообще я карты энти не признаю, но некоторые вещи - тырнет там, Каспера - без карты уж больно геморно оплачивать, для таких и завёл, чтобы положить, скажем, двадцатку и пару раз в год не задумываясь сколько там использовать. С бесплатным обслуживанием при условии постоянного остатка 15 тыщ или потраты 17 в месяц. Как раз для меня, по остатку-то. Не выполнил - снимается за этот месяц 250. И вот 28 июля получаю я СМС что условия мы поменяли аж с 1 этого самого июля же. Остаток теперь не канает, но тратить достаточно 5. Проверил на сайте - да, всё так и есть. Надо сегодня-завтра успеть потратить пятёрку. А я ж летом сельский житель. В нашем сельпе картой можно только продавщицу Марьянку по носу щёлкнуть. Ладно, накинул клемму на аккумулятор, попёрся в райцентр. В доме-то всё было, в основном таблетками впрок в аптеке закрыл эту пятёрку. 30-го числа, ога. А хрен там, быстро только кошки родятся. По учёту, видать, не успело пройти, и первого 250 аккуратно сняли, с этим никаких задержек быть не может.

Теперь прикинем. В стране народу мильёнов 120, я так думаю. Сталбыть, у десяти, пожалуй, такие их карты были. Множим 250 рублёв на 10 мульёнов и получаем щелчком пальцев 2.5 ярда из воздуха. Хоттабыч и известный сын турецкоподданого нервно курят кальян в сторонке.

Я, натурально, вскипел и в первый же визит в город пошёл к ним и без разговоров ликвидировал нахрен эту карту. Не потому что пятёрку в месяц с неё тратить влом, а из принципа, нех с жульём якшаться. Причём передо мной трое были с тем же делом. Бизьнесь по-русски, ля.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823427
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovpastorчего тут нетривиального?
Например, проведение курсовой маржи по налоговому учёту.Так ведь нет никакой маржи! Счёт только рублёвый, но при оплате чего-либо, производится конвертация в валюту оплаты по текущему курсу банка рубль/валюта оплаты [+комиссия банка]. Курсовая маржа и налоговый учёт по НДФЛ возникают при купле/продаже валюты на бирже через брокера.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823430
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка,

да все такие. Тинькофф поднял беспошлинный остаток с 30тыс. до 50.

Списался со Сбером. Настройки на онлайн-платежи нет. Деньги приходят на карточку с последней активностью. Сэкономили на полях или таблицах. Таймштамп рулит в Сбере.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823436
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devСчёт только рублёвый, но при оплате чего-либо, производится конвертация в валюту оплаты по
текущему курсу банка рубль/валюта оплаты [+комиссия банка].

Оплате обычно предшествует документ на оплату. И из-за разницы курсов в момент его
выставления и в момент оплаты возникает забавная вещь: ты выставил счёт на ХХХ рублей,
провёл его как задолженность клиента, а потом тебе от клиента приходит УУУ рублей и
внезапно сальдо с бульдо не сходятся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823437
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.06.2019 13:36, KreatorXXI пишет:
> Таймштамп рулит в Сбере.

us-us! (C)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823519
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, наступать на грабли путания потока операций в микрокосме БД и потока событий в макрокосме реальной жизни, являющегося причиной протекания первого, свойственно, наверное, каждому программисту как минимум один раз в жизни. Он же в БД живёт, для него она - реальность. Я наступал. Ну и, соответственно, архив операций - это одно, а архив событий - другое. Временная последовательность разная. Первым пользуются а) программисты с целью понять где и когда они накосячили и с какого места надо корректировать данные б) служба безопасности с целью понять кто, когда и как на... на... обманул, короче, контору. А для хозяйственных целей пользуются вторым.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823520
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovrdb_devСчёт только рублёвый, но при оплате чего-либо, производится конвертация в валюту оплаты по
текущему курсу банка рубль/валюта оплаты [+комиссия банка].

Оплате обычно предшествует документ на оплату. И из-за разницы курсов в момент его
выставления и в момент оплаты возникает забавная вещь: ты выставил счёт на ХХХ рублей,
провёл его как задолженность клиента, а потом тебе от клиента приходит УУУ рублей и
внезапно сальдо с бульдо не сходятся.


Это Вам, горемычным тяжко. Мне проще. Все, что поступило на л/с клиента - уже фискализировано и в налоговой.
Это унутре работает в рублях, зайчиках или СБМШ. (Серо-буро-малиновых шариках, они же УЕ-БИНы :)

А для непонятливых договор оферты на соседнем заборе, о том что на деньги клиента налита вода, насыпан снег и посажена трава на поле для гольфа. И ежели клиент не пришел и не воспользовался всей этой благодатью, до деньги все равно спишутся. Бонусы и подавно.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823522
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIWildSery,

перевели не на счёт и не на карту, а на номер мобильного телефона. Если речь обо мне. Счетов у меня ещё больше, чем карт. Но, похоже, сбер просто счета без карт не рассматривает для перевода по мобиле.Насколько я понимаю, перевести на номер телефона можно только ОПСОСу.
А в банк можно деньги перевести на "номер телефона" только в специализированном мобильном приложении, т.е. это только идентификатор, по которому срабатывает банковская система конкретного банка. С тем же успехом можно перевести деньги на ник KreatorXXI, если бы они захотели включить такую возможность.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823538
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovОплате обычно предшествует документ на оплату. И из-за разницы курсов в момент его
выставления и в момент оплаты возникает забавная вещь: ты выставил счёт на ХХХ рублей,
провёл его как задолженность клиента, а потом тебе от клиента приходит УУУ рублей и
внезапно сальдо с бульдо не сходятся.Самое поганое, когда "бульдо" расходится с "сальдо" на копейки - тут даже возврат переплаты или требование доплаты нецелесообразны. Остаётся лишь сторнировать и переделывать первичную документацию, подгоняя "сальдо" под "бульдо".
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823556
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryНасколько я понимаю, перевести на номер телефона можно только ОПСОСу.
сберовское приложение уже где-то год для перевода денег вместо номеров карт выводит только номера телефонов. И уж какая карта привязана к этому телефону, по мнению сбера - х.з., это можно увидеть только инициировав платеж (выдаются последние цифры номера карты и имя-отчество с буквой фамилии).
Бесит неимоверно, мне приходится постоянно переспрашивать номера карт родственников, если перевожу.
Может быть в этом есть какой-то тайный смысл, но я его пока не понял.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823560
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvсберовское приложение уже где-то год для перевода денег вместо номеров карт выводит только номера телефонов.Моё сберовское приложение для андроида переводит на телефон/карту/счёт на выбор (имеется в виду получатель - клиент сбера)
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823561
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvМожет быть в этом есть какой-то тайный смысл, но я его пока не понял.

Ха. За перевод комиссию взяли, желательно не попасть в тот, на который положить надо, за второй перевод уже с получателя ещё возьмём. С миру по нитке...
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823574
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка,

не, ты погоди. перед платежом они данные же показывают, можно кнопку "подтвердить платеж" не нажимать, если там не то. Другое дело, если у человека несколько карт, то как в таких случаях оно дает выбирать, я не представляю (и не дает).
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823584
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSerykdvсберовское приложение уже где-то год для перевода денег вместо номеров карт выводит только номера телефонов.Моё сберовское приложение для андроида переводит на телефон/карту/счёт на выбор (имеется в виду получатель - клиент сбера)
Вы можете выбрать номер телефона, а потом приложение сообщит номера банковских карт, привязанных к нему?
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823606
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIВы можете выбрать номер телефона, а потом приложение сообщит номера банковских карт, привязанных к нему?Я могу отправить "на номер телефона", без выбора конкретного счёта, или я могу отправить на любой номер карты.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823622
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryKreatorXXIВы можете выбрать номер телефона, а потом приложение сообщит номера банковских карт, привязанных к нему?Я могу отправить "на номер телефона", без выбора конкретного счёта, или я могу отправить на любой номер карты.
Это и есть проблема. Для получателя. Отправителю по барабану. И, конечно, отправитель не должен видеть счета получателя. Правильно дать настройку получателю. Я попросил рассмотреть мою хотелку. Но вряд ли быстро реализуют. Вообще не факт, что реализуют.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823629
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIа потом приложение сообщит номера банковских карт, привязанных к нему?
спаси господь! потом предлагается ввести сумму, а уже потом пред-платежное сообщение, на какую карту свалится ваш платеж.
Но оно как-то сопоставляет запись из телефонной книги с номером карты получателя.
В общем, я не разобрался - там есть возможность вводить и номер карты, и номер счета получателя, и даже втыкать номер карты считывая ее NFC.
Просто я привык тыкать в историю платежей, но она теперь чуть в другом месте.
По умолчанию лезет платеж через "адресную книгу", это для клиентов сбера.
Для других - перевод по номеру телефона или номеру карты.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823650
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIотправитель не должен видеть счета получателя.

"Чо?" (с)
Очередная голливудская идея "зная номер банковского счёта хакер может украсть ваши
деньги"? Или "переведи деньги туда не знаю куда"?

PS: Ей-ей, я не хотел разводить оффтопик.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39823660
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Номер телефона это десять цифр и я могу посмотреть его в контактах собственного телефона.
Номер счёта это двадцать цифр и где их взять "вот прям щас" - я просто не представляю.

P.S.
Есть, всё-таки, разница между "постоянные контрагенты" и "разово перечислить".
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39824368
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСисдба Мастеркеевичэто не решит исходную проблему - т.е. не обеспечит единственность бонуса в статусе "активный".

"чо?" (с)
Ты каким-то магическим образом сумеешь запихать в поле "активный бонус" ссылку сразу на
два бонуса? Тут уже первая НФ начнёт курить в углу.
У бонуса есть статус. Их несколько. В том числе "active". Если мы запишем в аккаунт id активного бонуса, то это никак не обеспечит уникальности записей со статусом "active".

Мимопроходящий05.06.2019 15:37, Сисдба Мастеркеевич пишет:
> у пользователей есть аккаунты, для каждой поддерживаемой валюты.

очень странное решение.Поясни.

KreatorXXIКонечно, если в аккаунты пихнуть активный бонус. Этих аккаунтов у одного пользователя много. Наверно, вот откуда плясать надо.Много, но один аккуант = одна валюта, более одного аккаунта по какой-либо валюте не может быть. Всё расчеты строго по аккаунтам, никаких курсов валют не требуется. Если пользователь переключился на кошелек в еврах, то и пополняет его в еврах, и тратит евры, и баланс его ведется в еврах, и т.д.

Про уточнение задачи я уже написал - это уникальность активного бонуса для аккаунтов, а не пользователей.

Гаджимурадов РустамСисдба Мастеркеевич > Триггеры ... тимлид их не любит, поэтому у нас их нет. Вообще. Как и процедур.

Сорри, не мог пройти мимо...


А вы часом никаком ORMом не пользуетесь?
Рустам, твой ХШ в полном порядке
На самом деле там внутри PHP + Postgres + ORM, я просто примеряю, как бы я решал эти же задачи на FB
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39824402
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба МастеркеевичУ бонуса есть статус. Их несколько. В том числе "active". Если мы запишем в аккаунт id
активного бонуса, то это никак не обеспечит уникальности записей со статусом "active".

А, извини, я неправильно понял задачу. Я думал, что у тебя пользователь может иметь только
один бонус, а у тебя, оказывается, два пользователя не могут иметь один и тот же бонус...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39824435
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСисдба МастеркеевичУ бонуса есть статус. Их несколько. В том числе "active". Если мы запишем в аккаунт id
активного бонуса, то это никак не обеспечит уникальности записей со статусом "active".

А, извини, я неправильно понял задачу. Я думал, что у тебя пользователь может иметь только
один бонус, а у тебя, оказывается, два пользователя не могут иметь один и тот же бонус...


Не. Пользователи приплетены для туману. Это некто аккаунт-сан не может иметь два бонуса именно со значением атрибута active. Причём это должно быть отражено именно в таблице многие ко многим аккаунт-бонус и никак иначе. А значений у этого атрибута может быть тыщ 40. Неважно что в нём по смыслу смешение нескольких сущностей, внутренний кодекс клана это допускает. А вот применение стандартных средств внутри базы в интересующих клан целях, приводящее при назначении некоему бонусу статуса active к сбросу оного у предыдущего его носителя или лок конфликту, не допускает. По кодексу это ведёт к потере лица и чести. Возможно, дайме даже будет настаивать на сепукку. Ибо самураи клана всё должны делать уникальными индексами мечом, даже кушать рис и сакэ с него слизывать, предварительно обмакнув в чашу. Вариант выполнять функции триггера на клиенте и откатывать транзакцию при конфликте не достоин внимания, поскольку какой-нибудь утративший честь самурай может влезть мимо приложения и учёт такой возможности согласуется с концепцией единства и борьбы инь и янь.

Короче, подозреваю тонкий троллинг. Достойнейший Мастеркеевич заключил пари на бутылку сакэ, что он справится с поставленной задачей не пользуясь имеющемися в АИ средствами. И переоценил возможности своего кунгфу. Остаётся что? Правильно, постараться заставить разработчиков FB всё бросить и делать самолётик для обслуживания баз с нарушениями НФ при проектировании. Причём нарушениями не в смысле классической продуманной и допустимой, в рамках имеющейся функционально-целевой модели предметной области, денормализации с целью перекладывания нагрузки с чтения, происходящего 100500 раз на дню, на запись, случающуюся раз-другой-третий. Ибо выпить-то хочется. А жаба душит.

(Уходит из темы медитировать под цветущей яблоней).
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39824780
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСисдба МастеркеевичУ бонуса есть статус. Их несколько. В том числе "active". Если мы запишем в аккаунт id
активного бонуса, то это никак не обеспечит уникальности записей со статусом "active".

А, извини, я неправильно понял задачу. Я думал, что у тебя пользователь может иметь только
один бонус, а у тебя, оказывается, два пользователя не могут иметь один и тот же бонус...
Нет, ты правильно понял задачу! Именно так она и была определена:Сисдба МастеркеевичТакая задача: есть пользователи, им выдаются некоторые бонусы. Пользователь может активировать бонус, т.е. у бонуса есть статус.
И есть нюанс - у каждого пользователя активным может быть только один бонус. Далее активный бонус либо отменяется, либо используется, т.е. в дальнейшем статус его изменяется либо по решению пользователя, либо после срабатываения некоторых условий.Просто ТС неправильно понял твой ответ, так как решил, что ты имеешь в виду идентификатор бонуса, а не идентификатор пользователя (идентификатор учётки пользователя). Естественно, что выставление статуса 'active' на бонус, само по себе, не обеспечивает необходимого ограничения.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39824783
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksrdb_devпропущено...

Именно в этой уникальности как раз вся "смысловая нагрузка", для обеспечения условия "у пользователя не может быть более двух активных бонусов одномоментно"

А одномоментно - это как?
А если в соседнюю милисекунду - это уже не одномоментно и допускается?Сорян, не заметил твоего вопроса.
Да - допускается. Почему нет? Пользователь сначала активировал один бонус, а затем передумал и в следующую миллисекунду активировал другой бонус (хотя, это у него вряд ли получиться, даже при пинге до сервера менее миллисекунды). Хозяин - барин.
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39824873
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаПравильно, постараться заставить разработчиков FB всё бросить и делать самолётик для обслуживания баз с нарушениями НФ при проектированииНе надо обвинений.
Если что, напоминаю как звучал исходный вопрос:
Сисдба МастеркеевичКак сделать такое ограничение в базе ?Тут ничего нет про "заставить разработчиков FB всё бросить и делать самолётик".

Кроме того, Денис и Влад во первЫх строках уже написали, как это сделать:
21901288
21901289
...
Рейтинг: 0 / 0
Как обеспечить частичную уникальность ?
    #39824892
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, частичные индексы были всё равно полезны, немного для других случаев.
Скорее в плане оптимизации чтобы индекс был поменьше, да и в качестве ограничения его использования оптимизатором.
...
Рейтинг: 0 / 0
98 сообщений из 98, показаны все 4 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как обеспечить частичную уникальность ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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