我正在自学django,希望为用户设置一个简单的设置,使其具有多个角色,每个角色都有自己的设备/库存。我从未使用过数据库,因此正确建立关系是我需要帮助/指导的事情。
我的想法:
User
可以有多个UserCharacters
,每个Character
都引用一个基本BaseAttributes
实例,以及一些AttributeModifiers
和UserCharacter
。每个InventoryItems
还具有一个由UserCharacters
组成的清单,该清单与Item
一样引用一个BaseAttributes
实例,并具有AttributeModifiers
和InventoryItems
。
我想知道在BaseAttributes
上重复使用相同的AttributeModifiers
(和UserCharacters
,UserCharacters
等)是否明智/可行。 IE如果两个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
========================================
清单,然后创建一个新实例(如果其中之一发生更改)?
我现在拥有的模型(请滚动,因为其中的一些隐藏了)
expect
现在没有太多代码,因为我不想麻烦地设置此代码,只是想出一条正确的路线来对其进行更改,但是我将尝试提供必要的信息以提供更有用的答案。
此外,对于我概述的现有结构的任何建议将不胜感激。 谢谢。
答案 0 :(得分:0)
在SQlite3中,我只建议为InventoryItem
创建一个单独的表,并将InventoryItem
的唯一ID放在UserCharacter
清单的条目中。>
在单独的注释上,根据一个字符可以携带多少InventoryItem
,您可能还想为所有字符所持有的所有InventoryItem
创建一个单独的表,并用字段表示ID InventoryItem
和UserCharacter
中的一个。