169 похожих чатов

Народ, хочу посоветовать по архитектуре таблиц в бд, нужно написать

конфигуратор программ лояльности, гибкий что капец, может быть индивидуальная программа, может быть для определенной группы пользователей (например с общий статусом), может действовать как постоянная программа (применяется на каждый заказ если выполнены необходимые условия лояльности), может быть одноразовая программа (если пользователь получил награду, второй раз получить не может), программа может действовать по времени (с 12 до 17), может в определенные дни (8 марта) или периоды (с понедельника по четверг), может быть как награда за определенное достижение (общая сумма заказов превысила какую-то «цифру»), условия могут по разному суммироваться
например: (А или Б) И (С или Д)
и тд…
и это только часть кейсов, как бы писали подобное ?

16 ответов

14 просмотров

слона нужно есть потихоньку, маленькими кусочками

Михаил-Харченко Автор вопроса
Михаил-Харченко Автор вопроса

@psytrgles @zmurf @oleksandr_moik что думаете ? может кто-то делал что-то подобное ?

Слишком абстрактно, сомневаюсь, что кто-то возьмется советовать что-то, ибо это разрабатывать надо. Вопрос в чем? Хранишь даты... Если периодичность есть, можно у крона синтаксис взять.

Михаил-Харченко Автор вопроса
PSYTRGLES
Слишком абстрактно, сомневаюсь, что кто-то возьмет...

да тут скорее вопрос как это в базу укладывать лучше, видишь ситуация в том, что сами условия разные могут быть, я думаю либо в сторону json-а либо в сторону полиморфных связей, по типу: table loyalti_program_rule: — loyalti_program_id — rule_type — rule_id а дальше уже фигачить истории по типу: date_rules: — start — end time_rules: — start — end status_rules: — status_id и тд и в зависимости от типу правила подкидывать стратегию его проверки

Михаил-Харченко Автор вопроса
PSYTRGLES
Слишком абстрактно, сомневаюсь, что кто-то возьмет...

или вообще скомбинировать эту историю, что-то выносить в типы, и в каких-то типах заводить json-ы

Михаил-Харченко Автор вопроса
PSYTRGLES
Слишком абстрактно, сомневаюсь, что кто-то возьмет...

да, наверное лучше всего комбинацию сделать, для расширения функционала будет сразу два направления, и так и так можно будет сделать.

Михаил Харченко
да тут скорее вопрос как это в базу укладывать луч...

Если в выборке не нужно работать по json, то вполне можно и так хранить. Сложно сказать, от ситуации отталкиваться надо. Обычно, если непонятно как лучше, то выбираю один вариант, потом если надо будет уже переделать. Json выглядит пока что проще

Я бы полиморфно сделал. У меня схожая задача была, только адаптивные поля для нескольких типов моделей(пользователь и ещё несколько). Самое сложное что может быть из этого - писать условия по этим полям, мне пришлось некоторые поля делать системными (запрет на удаление) и подписывать в бд

Михаил Харченко
Что значит адаптивные поля?

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

Михаил-Харченко Автор вопроса
Ратмир Диронин
Список полей в бд, которые админ может добавлять/и...

Хм… звучит как задача с permissions не совсем понимаю зачем вам для этого понадобились полиморфные связи

Михаил-Харченко Автор вопроса
Ратмир Диронин
fields users pages field_entity

приведенная вами схема и есть частный случай задачи с permissions, только названия чуть-чуть поменялись: roles, permissons, model_roles, model_permissions, roles_permissions,

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта