Отношения между игроками и базами данных в игре - PullRequest
1 голос
/ 06 июля 2010

Я пытаюсь выяснить, как смоделировать нормализованную базу данных, где у игрока может быть несколько классов. Какая связь между игроком и объектами класса?

Каждый игрок сможет иметь несколько классов, и каждый класс также предоставит игроку несколько навыков. Я знаком с нормализованными базами данных и работаю с ними, но многие из них не созданы с нуля, особенно не для себя.

Я работаю с набором инструментов сообщества MySQL, если у кого-нибудь есть удобная диаграмма EER / скриншот, который они также могут показать мне:)

Ответы [ 2 ]

3 голосов
/ 06 июля 2010

Обычно это обрабатывается с помощью таблицы ссылок для отношения многие ко многим:

PlayerClass:
PlayerID
ClassID

Обычно с PlayerID, ClassID является первичным ключом, а PlayerID и ClassID являются ссылками внешнего ключа на ваши таблицы Class и Player.

Как правило, это будет проиндексировано и другим способом (ClassID, PlayerID) во многих проектах (хотя, возможно, не в вашем).

Ваша таблица навыков будет аналогично привязана к классу:

ClassSkills:
ClassID
SkillID

Теперь вот где это становится сложным - что произойдет, если игрок находится в двух классах, каждый из которых дает один и тот же навык? Являются ли они аддитивными или объединены или как? Это проблема проблемной области, которую необходимо решить, прежде чем вы сможете просто объединить все эти столы и посмотреть, какими навыками обладает игрок.

1 голос
/ 06 июля 2010

Отношения будут многие ко многим. Обычно моделируется промежуточной таблицей:

table Player:       Id int, name varchar(50)
table PlayerClass:  PlayerId int, ClassId int
table Class:        Id int, name varchar(50)

Таблица PlayerClass должна иметь ограничение внешнего ключа в обоих столбцах.

Обратите внимание, что базы данных считаются слишком медленными для игр. В большинстве игр используется собственный механизм хранения.

...