Я не был уверен, как правильно озаглавить это, так что извините за возможно вводящее в заблуждение название. Основная идея - это механизм, который может пометить любую запись любой таблицы как «заблокированную» и найти все, что зависит от этих заблокированных записей.
Допустим, у нас есть RPG-игра, а содержимое нашего сервера хранится в базе данных. , Я хочу создать базу данных, которая могла бы представлять эту модель:
- ITEMS : игровые предметы. Может использоваться при создании рецептов и т. Д. c.
- LOCATIONS : список игровых локаций. Включите список предметов, которые можно найти в этом месте. Доступ к некоторым локациям возможен только в том случае, если игрок обладает определенными предметами / выполнил достижение
- ДОСТИЖЕНИЯ : достижения, которые игрок может разблокировать. Чтобы получить его, может потребоваться выполнить квест / приобрести предмет / место доступа и т. Д. c.
- КВЕТЫ : квесты, доступные для игрока. Задания запускаются, если игрок достигает местоположения / получает определенный предмет / достижение или во время событий.
- СОБЫТИЯ : случайные события, например, для Хэллоуина. Во время событий разблокируются c типы локаций / предметов.
Может быть даже больше таблиц, также зависящих друг от друга. Теперь мне нужен универсальный c механизм для блокировки любых записей этих таблиц (для отладки / исправления эксплойтов / планирования и т. Д. c).
Например, у меня есть событие "Helli sh week" , во время которого игроки могут получить доступ к локации "Hell" , получить убийцу демонов " достижение и добыча частей " дьявольских " предметов. После получения всех частей «дьявольской брони» и достижения новое место - «9-й круг ада» - будет разблокировано, и так далее, и так далее. Затем мы могли бы написать очень простой планировщик для событий, блокирующих / разблокирующих их, когда придет время.
Теперь давайте скажем, что из-за эксплойта мы хотим "заблокировать" элемент "ключ дьявола", что дает доступ к "спальне дьявола" . Теперь мы должны обнаружить все, что зависит от «ключа дьявола» и заблокировать его. Поэтому я должен построить граф зависимостей для заблокированных записей. Я хочу, чтобы мои таблицы были чистыми - если элемент может быть приобретен во время мероприятия, мы не хотим включать эту информацию в таблицу ITEMS, но в таблицу EVENTS и т. Д. И т. Д.
Как это могло быть " механизм блокировки будет реализован? Я не хочу добавлять столбец «LOCK» в каждую таблицу и не изменять внутренние компоненты этого механизма блокировки каждый раз, когда изменяется схема. Этот механизм «БЛОКИРОВКИ» должен быть как можно более ориентирован на будущее.
Как этот механизм может быть реализован в PostgreSQL / MySQL?
Дополнительный вопрос: можно ли это сделать в Redis