角色/库存/设备数据库结构-Django / SQLite

时间:2018-09-03 18:10:55

标签: python django sqlite

我正在自学django,希望为用户设置一个简单的设置,使其具有多个角色,每个角色都有自己的设备/库存。我从未使用过数据库,因此正确建立关系是我需要帮助/指导的事情。

我的想法: User可以有多个UserCharacters,每个Character都引用一个基本BaseAttributes实例,以及一些AttributeModifiersUserCharacter。每个InventoryItems还具有一个由UserCharacters组成的清单,该清单与Item一样引用一个BaseAttributes实例,并具有AttributeModifiersInventoryItems

我想知道在BaseAttributes上重复使用相同的AttributeModifiers(和UserCharactersUserCharacters等)是否明智/可行。 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

现在没有太多代码,因为我不想麻烦地设置此代码,只是想出一条正确的路线来对其进行更改,但是我将尝试提供必要的信息以提供更有用的答案。

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

1 个答案:

答案 0 :(得分:0)

在SQlite3中,我只建议为InventoryItem创建一个单独的表,并将InventoryItem的唯一ID放在UserCharacter清单的条目中。

在单独的注释上,根据一个字符可以携带多少InventoryItem,您可能还想为所有字符所持有的所有InventoryItem创建一个单独的表,并用字段表示ID InventoryItemUserCharacter中的一个。