字符/库存/设备DB结构 - Django / SQLite

问题描述 投票:0回答:1

我正在教自己django并想要一个简单的设置让用户拥有多个角色,每个角色都有自己的设备/库存。我从来没有使用数据库,所以我需要帮助/指导正确的关系。

我的想法:一个User可以有多个UserCharacters,每个都参考基地Character实例,以及一些BaseAttributesAttributeModifiers。每个UserCharacter也有一个由InventoryItems制成的库存,像UserCharacters,参考Item实例,并有BaseAttributesAttributeModifiers

我想知道是否明智/可能在InventoryItems上重复使用相同的BaseAttributes(和AttributeModifiersUserCharacters等)。 IE如果两个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
========================================

现在没有太多的代码,因为我不想在设置正确的路线之后设置这个代码来改变它,但我会尝试提供任何必要的答案。

此外,对我所概述的现有结构的任何建议都将不胜感激。谢谢。

python django sqlite
1个回答
0
投票

在SQlite3中,我建议为InventoryItems设置一个单独的表,并将InventoryItem的唯一ID放入UserCharacter库存的条目中。

另外,根据角色可以携带多少个InventoryItems,您可能还想为所有角色所有的InventoryItems创建一个单独的表,其中的字段表示InventoryItemUserCharacter的id。

© www.soinside.com 2019 - 2024. All rights reserved.