【发布时间】:2013-08-25 18:06:50
【问题描述】:
我正在开发一个在线游戏的业余爱好项目。该游戏将玩家数据存储在一个大的平面文件中。数据本身包含玩家的所有信息,从名称到玩家本身的物品。它本身就是一个相当多的列,并且有几十个项目只会增加启动的平面文件大小。
给你一个视觉。我当前的播放器文件是 192 列(不考虑项目)。
玩家数据
减少绒毛后,我的平面文件中有 51 列用于播放玩家数据。这不包括玩家的物品或能力。我已经决定可以将它们分成单独的表并与 FK 链接。
51 列数据对玩家来说是唯一的,不应重复。它们不是我被告知的正常化的良好候选者。
表格
- 身份证
- 姓名
- 密码
- 种族
- 性
- 类
- 级别
- 黄金
- 银
- 经验
- 任务
- 盔甲
- 实力
- 智慧
- 灵巧
- 等
活动
但是,选择和更新这些列中的某些列时的活动却大不相同。有些会在玩家移动时更新,有些会在玩家登录游戏并加载到内存时很少使用。记录永远不会被删除或重建。每列都有一个值。活动频率从每秒到每月一次不等。
问题
这让我想到了一个问题。如果它们在同一个表中,我是否可以根据活动将这些列拆分并提高性能,而不是传统的数据规范化方式?或者我应该把它们放在同一张表上,只依靠正确的索引?大多数列看起来不错,但就像我说的,有些列比其他列使用得更多。但是,当一些人比其他人更多地使用时,会有很大的不同。这让我很害怕。
【问题讨论】:
-
您可以通过创建一个名为
Activities的存储活动信息的表来拆分它们。除此之外,真的很难说什么,因为你的问题没有太多细节。 -
不太清楚我明白你的意思。我更新了活动描述以包含有关活动的更多详细信息。但是,问题是您是否可以根据某些列比同一张表中的其他列更活跃(选择或更新)来进行拆分?
-
。 .您的数据一开始听起来并没有标准化。您似乎将不同的实体存储在一行中(用户和活动从问题中命名为两个)。我不清楚这个问题的意图。
-
表格应该反映实体及其关系,例如 Player、Item、player_has_item、...
-
如果您无法规范化内容并放入适当的实体/关系中,请尝试 NoSQL(MongoDB,...),它可以保存文档并且不在乎文档包含多少“列”。
标签: mysql sql database database-schema