Разработка схемы для системы инвентаризации ... я должен рассчитать количество или отслеживать его? - PullRequest
1 голос
/ 12 сентября 2010

Я делаю инвентарь для игры, скорее как игра в стиле FF. Я имею в виду два дизайна, и интересно, что лучше

  1. Отслеживать количество как поле; схема будет: item ( <item_id>, <character_id>, quantity ). Если персонаж экипирует предмет или удаляет предмет из своего инвентаря, мне нужно убедиться, что поле количества корректно.

  2. Каждый предмет занимает отдельный ряд. Я буду использовать GROUP BY для расчета количества каждого типа товара (по item_id). Оснащение и удаление предметов становятся более простыми, хотя, если у персонажа есть десять лечебных зелий, они занимают десять рядов.

В настоящее время нет ограничений по пространству или ограничения на программирование (с использованием MySQL). Какая система лучше в долгосрочной перспективе?

Ответы [ 2 ]

1 голос
/ 12 сентября 2010

Звучит так, как будто между персонажами и предметами где-то есть отношения один ко многим.

Я бы порекомендовал начать с количества как производной позиции, используя GROUP BY. Я бы изменил его, только если производительность стала проблемой.

Мне не нравится дизайн, в котором элемент должен отслеживать его количество, но если бы вам пришлось это сделать, вы могли бы выполнить это с помощью триггера в MySQL для автоматического обновления количества по INSERT, UPDATE или DELETE.

0 голосов
/ 12 сентября 2010

Структура базы данных определяется типом запросов, которые необходимо выполнить.

В этом случае, если все, что вам нужно, это получить количество для элемента x для символа x, тогда будет работать первый вариант, но если вам потребуется:

количество товара х

кто это item_attribute1 = x

AND item_attribute2 = X

AND character_attribute1 = x

AND character_attribute2 = x

Вам нужно будет перейти к варианту 2.

В варианте 1 все предметы и все персонажи имеют одинаковое количество, несмотря на то, что они имеют разные атрибуты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...