我正在教自己django并想要一个简单的设置让用户拥有多个角色,每个角色都有自己的设备/库存。我从来没有使用数据库,所以我需要帮助/指导正确的关系。
我的想法:一个User
可以有多个UserCharacters
,每个都参考基地Character
实例,以及一些BaseAttributes
和AttributeModifiers
。每个UserCharacter
也有一个由InventoryItems
制成的库存,像UserCharacters
,参考Item
实例,并有BaseAttributes
和AttributeModifiers
。
我想知道是否明智/可能在InventoryItems
上重复使用相同的BaseAttributes
(和AttributeModifiers
,UserCharacters
等)。 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
========================================
现在没有太多的代码,因为我不想在设置正确的路线之后设置这个代码来改变它,但我会尝试提供任何必要的答案。
此外,对我所概述的现有结构的任何建议都将不胜感激。谢谢。
在SQlite3中,我建议为InventoryItem
s设置一个单独的表,并将InventoryItem
的唯一ID放入UserCharacter
库存的条目中。
另外,根据角色可以携带多少个InventoryItem
s,您可能还想为所有角色所有的InventoryItem
s创建一个单独的表,其中的字段表示InventoryItem
和UserCharacter
的id。