пометить любые sql записи и найти все зависимости в реляционной базе данных - PullRequest
0 голосов
/ 27 февраля 2020

Я не был уверен, как правильно озаглавить это, так что извините за возможно вводящее в заблуждение название. Основная идея - это механизм, который может пометить любую запись любой таблицы как «заблокированную» и найти все, что зависит от этих заблокированных записей.

Допустим, у нас есть RPG-игра, а содержимое нашего сервера хранится в базе данных. , Я хочу создать базу данных, которая могла бы представлять эту модель:

  • ITEMS : игровые предметы. Может использоваться при создании рецептов и т. Д. c.
  • LOCATIONS : список игровых локаций. Включите список предметов, которые можно найти в этом месте. Доступ к некоторым локациям возможен только в том случае, если игрок обладает определенными предметами / выполнил достижение
  • ДОСТИЖЕНИЯ : достижения, которые игрок может разблокировать. Чтобы получить его, может потребоваться выполнить квест / приобрести предмет / место доступа и т. Д. c.
  • КВЕТЫ : квесты, доступные для игрока. Задания запускаются, если игрок достигает местоположения / получает определенный предмет / достижение или во время событий.
  • СОБЫТИЯ : случайные события, например, для Хэллоуина. Во время событий разблокируются c типы локаций / предметов.

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

Например, у меня есть событие "Helli sh week" , во время которого игроки могут получить доступ к локации "Hell" , получить убийцу демонов " достижение и добыча частей " дьявольских " предметов. После получения всех частей «дьявольской брони» и достижения новое место - «9-й круг ада» - будет разблокировано, и так далее, и так далее. Затем мы могли бы написать очень простой планировщик для событий, блокирующих / разблокирующих их, когда придет время.

Теперь давайте скажем, что из-за эксплойта мы хотим "заблокировать" элемент "ключ дьявола", что дает доступ к "спальне дьявола" . Теперь мы должны обнаружить все, что зависит от «ключа дьявола» и заблокировать его. Поэтому я должен построить граф зависимостей для заблокированных записей. Я хочу, чтобы мои таблицы были чистыми - если элемент может быть приобретен во время мероприятия, мы не хотим включать эту информацию в таблицу ITEMS, но в таблицу EVENTS и т. Д. И т. Д.

Как это могло быть " механизм блокировки будет реализован? Я не хочу добавлять столбец «LOCK» в каждую таблицу и не изменять внутренние компоненты этого механизма блокировки каждый раз, когда изменяется схема. Этот механизм «БЛОКИРОВКИ» должен быть как можно более ориентирован на будущее.

Как этот механизм может быть реализован в PostgreSQL / MySQL?

Дополнительный вопрос: можно ли это сделать в Redis

...