Структура персонажа / инвентаря / оборудования БД - Django / SQLite - PullRequest
0 голосов
/ 03 сентября 2018

Я учу себя django и хотел, чтобы пользователи имели несколько наборов персонажей, каждый со своим оборудованием / инвентарем. Я никогда не работал с базами данных, поэтому для правильного установления отношений мне нужна помощь / руководство.

Мое мышление: User может иметь несколько UserCharacters, каждый из которых имеет ссылку на базовый экземпляр Character, а также некоторые BaseAttributes и AttributeModifiers. Каждый UserCharacter также имеет инвентарь из InventoryItems, который, как и UserCharacters, ссылается на экземпляр Item и имеет BaseAttributes и AttributeModifiers.

Мне было интересно, было ли разумно / возможно ли повторно использовать идентичные InventoryItemsBaseAttributes, AttributeModifiers и т. Д.) Через UserCharacters. То есть если два UserCharacters каждого имеют инвентарь, содержащий "Меч" Item с одинаковыми характеристиками, могу ли я назначить этот Меч InventoryItem обоим UserCharacters инвентарям, а затем просто создать новый экземпляр, если один из них изменится?

Модели, которые у меня есть сейчас (пожалуйста, прокрутите, так как часть этого становится скрытой)

========================================
| User
|---
| username
========================================

========================================
| AttributedObject
|---
| attributes
| modifiers
========================================

========================================
| Attribute
|---
| name
| description
========================================

========================================    
| BaseAttribute
|---
| object >- ForeignKey(AttributedObject.id), related_name='attributes'
| attribute >- ForeignKey(Attribute.id)
| value
========================================

========================================
| AttributeModifier
|---
| object >- ForeignKey(AttributedObject.id), related_name='modifiers'
| attribute >- ForeignKey(Attribute.id)
| value
| method
| duration
========================================

========================================
| Item(AttributedObject)
|---
| name
| stack_size
========================================

========================================
| Character(AttributedObject)
|---
| name
| description
========================================

========================================
| UserCharacter(AttributedObject)
|---
| user >- ForeignKey(User.id), related_name='characters'
| character >- ForeignKey(Character.id)
| inventory
========================================

========================================
| InventoryItem(AttributedObject)
|---
| user_character >- ForeignKey(UserCharacter), related_name='inventory'
| item >- ForeignKey(Item)
| amount
========================================

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

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

1 Ответ

0 голосов
/ 03 сентября 2018

В SQlite3 я бы просто рекомендовал иметь отдельную таблицу для InventoryItem с и поместить уникальный идентификатор InventoryItem в запись для инвентаря UserCharacter.

В отдельной заметке, в зависимости от того, сколько символов InventoryItem sa может нести, вы можете также создать отдельную таблицу для всех InventoryItem s, содержащихся во всех символах, с полями для обозначения идентификатора * 1008. * и UserCharacter.

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