Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将对象保存到数据库时,我应该序列化对象还是保存每个属性_C#_Sql_Oop - Fatal编程技术网

C# 将对象保存到数据库时,我应该序列化对象还是保存每个属性

C# 将对象保存到数据库时,我应该序列化对象还是保存每个属性,c#,sql,oop,C#,Sql,Oop,我开始考虑一个基本的数据库驱动游戏(rpg)。 我在整理如何保存角色、属性和物品时遇到困难。对于大多数东西来说,只有一个是静态的是可以的,但是当有多个对象时,比如说一个库存,我就有点不知所措了 我决定把东西放进一个袋子里。bag对象可以有5-20个插槽中的任意位置,每个插槽都将根据唯一的数据库ID引用一个项目。那么如何设计bag表呢 BagID |所有者| Slot1 | Slot2 | Slot3 | Slot4 或 BagID |所有者|目录 有什么建议吗 自60年代cobb发明关系数据库以

我开始考虑一个基本的数据库驱动游戏(rpg)。
我在整理如何保存角色、属性和物品时遇到困难。对于大多数东西来说,只有一个是静态的是可以的,但是当有多个对象时,比如说一个库存,我就有点不知所措了

我决定把东西放进一个袋子里。bag对象可以有5-20个插槽中的任意位置,每个插槽都将根据唯一的数据库ID引用一个项目。那么如何设计bag表呢

BagID |所有者| Slot1 | Slot2 | Slot3 | Slot4

BagID |所有者|目录 有什么建议吗

自60年代cobb发明关系数据库以来,标准方法是规范化

BadId、SlotNr、ItemRef

完成了

另一个表包含这些项

请注意,缺少OwnerId-这是BagItemMap表。行李台上有行李ID、所有者ID和其他物品(总重量等)

这是一个标准的m:n关系。当你具体化这些物品时,你会得到一个包状物品,它将这些物品作为收藏品

有什么建议吗

自60年代cobb发明关系数据库以来,标准方法是规范化

BadId、SlotNr、ItemRef

完成了

另一个表包含这些项

请注意,缺少OwnerId-这是BagItemMap表。行李台上有行李ID、所有者ID和其他物品(总重量等)


这是一个标准的m:n关系。当您具体化这些对象时,您会得到一个包对象,其中包含作为集合的项目。

持久化策略取决于您的查询要求。如果您希望能够根据一个或多个字符的属性(例如,为所有三眼字符赋予额外的生命,查找所有具有五个以上生命的字符等)一次对多个字符执行操作,则应将各个属性保存到它们自己的列中。如果字符始终被视为BLOB,并且将序列化策略与RDBMS中的数据绑定没有问题,则使用
varbinary


当您将所有内容存储为一个BLOB,但同时使属性的子集在其单独的列中可用时,混合解决方案也是可能的。事实上,通常至少包含一些标识属性以简化搜索。

持久性策略取决于您的查询要求。如果您希望能够根据一个或多个字符的属性(例如,为所有三眼字符赋予额外的生命,查找所有具有五个以上生命的字符等)一次对多个字符执行操作,则应将各个属性保存到它们自己的列中。如果字符始终被视为BLOB,并且将序列化策略与RDBMS中的数据绑定没有问题,则使用
varbinary


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

好的,我明白了,谢谢,我还不知道我的需要,所以我不确定是否需要寻找所有的绿眼睛的人。虽然我想我会,或者至少我想保留这个选择。我怀疑我是否需要在物品层面上使用它。事实上这是错误的。我希望这大部分是一个“几乎没有搜索”的对象,以及一些基本上在内存中处理的对象。@TomTom在实践中,我需要实现一个全BLOB解决方案的唯一情况是当我构建一个持久缓存时。本质上,唯一可搜索的部分是对象的名称-其他所有内容都在BLOB中。嗯。。。事实上出于性能原因,Eve Online执行持久性blob;)好的,我明白了,谢谢,我还不知道我的需要,所以我不确定我是否需要寻找所有的绿眼睛的人。虽然我想我会,或者至少我想保留这个选择。我怀疑我是否需要在物品层面上使用它。事实上这是错误的。我希望这大部分是一个“几乎没有搜索”的对象,以及一些基本上在内存中处理的对象。@TomTom在实践中,我需要实现一个全BLOB解决方案的唯一情况是当我构建一个持久缓存时。本质上,唯一可搜索的部分是对象的名称-其他所有内容都在BLOB中。嗯。。。事实上出于性能原因,Eve Online执行持久性blob;)所以你的建议是我在评论中添加的,对吗?当然,袋子是一样的,主人不知道袋子,袋子知道主人?最后一个取决于设计;)主人可能知道这个包,但另一个允许多个包,所以更具战略性。所以你的建议是我在评论中添加的,对吗?当然,袋子是一样的,主人不知道袋子,袋子知道主人?最后一个取决于设计;)主人可能知道这个包,但另一个允许多个包,因此更具战略意义。
Select * from Items where BagID=10