Предисловие: у меня нет опыта работы с механизмами правил, правилами построения, правилами моделирования, реализацией структур данных для правил или еще чего-то. Поэтому я не знаю, что делаю, или что то, что я пытаюсь сделать ниже, находится вне базы.
Я пытаюсь понять, как хранить и обрабатывать следующий гипотетический сценарий. Чтобы упростить мою проблему, скажите, что у меня есть тип игры, где пользователь покупает объект, где может быть 1000 возможных объектов, и объекты должны быть приобретены в указанной последовательности и только в определенных группах. Например, скажите, что я пользователь, и я хочу приобрести объект F. Прежде чем я могу купить объект F, я должен предварительно приобрести объект A OR (B AND C). Я не могу покупать F и A одновременно, а не F и B, C. Они должны быть в последовательности, указанной в правиле. Сначала, затем F позже. Или, B, C сначала, затем F позже. Меня сейчас не интересует с промежутком времени между покупками или любыми другими характеристиками пользователя, только что они являются правильной последовательностью на данный момент.
Каков наилучший способ хранения этой информации для потенциально тысяч объектов, которые позволяют мне читать правила для приобретаемого объекта, а затем проверять его против предыдущей истории покупок пользователя?
Я попытался это сделать, но я застрял в попытке реализовать группы, такие как A OR (B AND C). Я хотел бы сохранить правила в базе данных, где у меня есть эти таблицы:
Objects
(ID(int),Description(char))
ObjectPurchRules
(ObjectID(int),ReqirementObjectID(int),OperatorRule(char),Sequence(int))
Но, очевидно, по мере того, как вы обрабатываете результаты, без группировки, вы получаете неправильный ответ. Я хотел бы избежать чрезмерного синтаксического анализа строк, если это возможно:). Один объект может иметь неизвестное количество предыдущих требуемых покупок. Фрагменты SQL или psuedocode для обработки правил будут оценены.:)