0

我开始考虑一个基本的数据库驱动游戏(rpg)。
我无法弄清楚如何保存角色、他的属性和他的物品。对于大多数只有一个静态的东西来说很好,但是当有像库存这样的多个对象时,我有点不知所措。

我决定把物品放进袋子里。bag 对象可以有 5 到 20 个插槽,每个插槽都将根据唯一的数据库 ID 引用一个项目。那么我该如何设计包桌。

包ID | 所有者 | 插槽 1 | 插槽 2 | 插槽 3 | 插槽 4 ......

或者

包ID | 所有者 | 内容 <-varbinary

有什么建议么?曾经有人告诉我,在数据库编程时,一列一数据,但我不喜欢 Slot1 的想法 | Slot2 等......它似乎不正确。

编辑

我是否完全错过了这个,它应该是引用包的正确项目。

物品编号 | 包ID | 插槽 | 姓名 | ......

那么当你想知道一个包里有什么时,你会

Select * from Items where BagID=10  
4

2 回答 2

3

有什么建议么?

由于 cobb 早在 60 年代就发明了关系数据库,因此标准方法是规范化。

BadId、SlotNr、ItemRef

完成的。

另一张桌子上有这些物品。

请注意,缺少 OwnerId - 这是 BagItemMap 表。BagTable 有 BagId、OwnerId 和可能的其他项目(总重量等)

这是一个标准的 m:n 关系。当您物化对象时,您将拥有一个将 Items 作为集合的 Bag 对象。

于 2012-05-30T17:51:26.530 回答
2

持久性策略取决于您的查询要求。如果您正在寻找一种基于一个或多个属性一次对多个角色执行操作的能力(例如,为所有三眼角色提供额外生命,查找所有生命超过五个的角色等.) 那么您应该将各个属性保存到它们自己的列中。如果一个字符始终被视为一个 BLOB,并且您将序列化策略与 RDBMS 中的数据联系起来没有问题,那么使用varbinary.

当您将所有内容存储为 BLOB 并在其单独的列中提供属性子集时,混合解决方案也是可能的。事实上,至少包含一些识别属性以简化搜索是很常见的。

于 2012-05-30T17:52:56.443 回答