我开始考虑基本的数据库驱动游戏(RPG) 我无法整理如何保存角色,他的属性和他的物品。对于大多数只有一个静态的东西来说很好,但是当有像库存这样的多个对象时,我有点不知所措。
我决定将物品放入袋子物品中。 bag对象可以有5到20个插槽,每个插槽都会根据唯一的数据库ID引用一个项目。那么我该如何设计包包呢。
BagID |所有者| Slot1 | Slot2 | Slot3 | Slot4 ......
或
BagID |所有者|内容< -varbinary
有什么建议吗?有人告诉我,当数据库编程时,一列一个数据,但我不喜欢Slot1 |的想法Slot2等......它似乎不对。
修改
我是否完全错过了这一点,这是应该引用Bag的项目。
ItemID | BagID |插槽|名称| .....
然后当你想知道包里有什么东西时
Select * from Items where BagID=10
答案 0 :(得分:3)
有什么建议吗?
标准方法自从关系数据库发明回到60年代以来,由cobb正常化。
BadId,SlotNr,ItemRef
成品。
另一张桌子上有这些物品。
请注意,缺少OwnerId - 这是BagItemMap表。 BagTable有BagId,OwnerId和其他可能的项目(总重量等)
这是一个标准的m:n关系。当你实现对象时,你就有了一个包含Items作为集合的Bag对象。
答案 1 :(得分:2)
持久性策略取决于您的查询要求。如果您正在寻找能够根据一个或多个属性一次对多个角色执行操作的能力(例如,为所有三眼角色赋予额外的生命,查找超过五个生命的所有角色,等等。)然后你应该将各个属性保存到自己的列中。如果一个字符始终被视为BLOB,并且您没有将序列化策略与RDBMS中的数据绑定的问题,那么请使用varbinary
。
当您将所有内容存储为BLOB,并且还可以在其单独的列中创建可用的属性子集时,可以使用混合解决方案。实际上,通常至少包含一些标识属性以简化搜索。