2013-01-03 30 views
0

我试图添加一个动作表,但我目前对于如何解决这个问题存在争议。成员动作表数据模型建议

在我进入更多细节之前。

我们有成员谁可以在我们的网站

  • 做不同的动作添加图像
  • 更新的图像
  • 率的图像
  • 张贴在图像
  • 评论添加博客post
  • 更新博文
  • 对博客文章发表评论
  • 等,等

动作表允许,如果他们希望将其添加到他们的观察名单我们的用户“关注”其他成员的活动。

我当前创建一个名为member_actions有以下的列表

[UserID] [actionDate] [actionType] [refID] 

[REFID]可以是在DB中的图像ID或博客帖子ID,或另一种可操作的一个id列的引用表(如事件)

[操作类型]是一个ENUM列与动作的名称,如(imgAdd,imgUpdate,blogAdd,blogUpdate,等...)

[actionDate]将决定哪些记录得到删除d每90天...所以我们不会保持永远的动作

当前MySQL查询我凸轮了是

​​

好了,所以基本上,因为,我会删除每周大约90天以上的操作......使用此查询来显示成员操作历史记录会有意义吗?

或者我应该添加一个新的文本列member_actions表名为[actionData]我可以存储json或xml格式的一些细节,用于快速查询member_action表。

它增加了表的大小,并减少了查询的复杂性,但表将从旧条目定期清除。

的假设是,最终我们将有不超过几10万个成员的更多,所以我会很担心的member_action表的表大小与它的文本[actionData]列将包含一些具体的细节。

我倾向于[actionData]模型,但任何建议或考虑将不胜感激。

另一个考虑因素是有可能img或博客的表格条目可能会被删除......所以我可以采取行动但没有参考记录......这肯定会增加问题。

在此先感谢

回答

1

因为您正在处理用户界面问题,所以性能至关重要。所有连接都需要时间,即使是索引。而且,查询数据库可能会锁定所有表(或索引)中的记录,这会降低插入速度。

因此,我倾向于通过维护记录中的文本来反规范化数据。

但是,一个关键的考虑因素是文本是否可以在事后更新。也就是说,您将在创建数据时加载数据。它可以改变吗?根据变化(可能涉及触发器和存储过程)来维护数据的问题可能会带来很多额外的复杂性。

如果数据是静态的,这不是问题。至于桌子的大小,我认为你不应该担心太多。数据库旨在管理内存。它将表保存在页面缓存中,该缓存应包含当前活动成员的页面。您可以随时增加内存大小,尤其是对于当今服务器领域内的100,000名用户而言。

+0

另一个考虑因素是有可能img或博客的表条目可能会被删除...所以我可以采取行动,但没有参考记录......这肯定会增加问题... – robert

+0

@robert。 。 。缓存一些值可能是部分解决方案。你会看到文字,但不是底层对象。 –

1

我会警惕这种方法的 - 为您添加要监视的加入将会持续增长(而疏额外的列在select语句以及各种行动)。

我不认为在这个表中有多个额外的列会让人感到可怕 - 而且这个查询听起来像是会频繁地运行,所以使它变得高效似乎是个好主意。

+0

所以....我有点困惑。你认为我应该与[actionData]列效率? – robert

+0

另一个考虑因素是img或博客的表条目可能会被删除......所以我有行动但没有参考记录... – robert