@Artem0071
Безработный mr. Junior

Как организовать БД?

В общем ситуация:

Есть пользователи которые создают свои "параметры", которые затем можно переиспользовать другим пользователям

Лучше это видно на примере:

Есть users. Каждый user может создать программу programs(id,title) и в каждой программе есть свои параметры params(id,title,default_value)

Затем эти параметры можно использовать в тексте в таком виде - И жили они %LIFE_LENGTH% и %HAPPINESS%

Получается:
есть таблицы: users, programs, params
и соединения:
user_program(user_id, program_id), program_params(program_id, param_id)


Еще есть пользователи которые пользуются программами users_getters(id, title)
Они так же пользуются программами user-getter_program(ug_id, prog_id)

ПРОБЛЕМА:
Проблема в параметрах

если основной пользователь удаляет параметр (например HAPPINESS) и затем его сразу добавляет, то у пользователей программой "слетает" этот параметр, потому что когда они первый раз устанавливали, то в связь
user_getter_params(ug_id, program_id, param_id, value)
записался старый id of HAPPINESS и получается что у них нет нового id, а старый не подходит программе

Что тут можно сделать?
ЗЫ: именно не редактирует параметр, а УДАЛЯЕТ
  • Вопрос задан
  • 211 просмотров
Решения вопроса 3
0xD34F
@0xD34F
1. Запретить удалять параметры, вместо этого помечать их как удалённые, а при повторной установке - снимать отметку об удалении.

2. Делать пользовательскую связь программы с параметром по имени параметра, а не id.
Ответ написан
Комментировать
gobananas
@gobananas
finishhim.ru
Запутанный вопрос, если я верно понял, юзер хранит созданный параметр в общей таблице. Тогда варианта 2:
1) Не дать удалять
2) Сделать общую таблицу куда стекаются все параметры от всех юзеров и при удалении из таблицы юзера удалять, а из общей нет.
И вообще удаления параметрв в этом случае не существует, есть только разрыв связи.
Но нутром чую тут архитектурный косяк.
Ответ написан
Комментировать
AlexMaxTM
@AlexMaxTM
Решение 1. Запретить пользователю вообще удалять, выдав сообщение, что на этот параметр подписаны люди, но он может его изменить, если необходимо.
Решение 2. Пользователь не удаляет параметр. Точнее для пользователя она удаляется, но в базе отмечается, что поле удалено. Если пользователь потом добавляет точно такой же параметр (проверяется по name), то параметр не добавляется, а ему присваивается статус "не удален/активен".
Решение. 3. Каскадная зависимость. Если пользователь удаляет что-то у себя в программе, то этот параметр удаляется у всех пользователей сразу. В этом случае, если пользователь снова добавляет параметр, то другим придется подключить данный параметр еще раз.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы