我正在尝试添加一个操作表,但我目前对于如何解决这个问题存在分歧。
在我详细介绍之前。
我们的会员可以在我们的网站上执行不同的操作
- 添加图像
- 更新图像
- 评价图像
- 在图片上发表评论
- 添加博客文章
- 更新博客文章
- 评论博客文章
- 等等等等
操作表允许我们的用户“观看”其他成员的活动,如果他们想将他们添加到他们的观察列表中。
我目前创建了一个名为member_actions的表,其中包含以下列
[UserID] [actionDate] [actionType] [refID]
[refID] 可以是对数据库中的图像 ID 或博文 ID 的引用,也可以是另一个可操作表的 id 列(例如事件)
[actionType] 是一个 Enum 列,具有操作名称,例如 (imgAdd,imgUpdate,blogAdd,blogUpdate, etc...)
[actionDate] 将决定每 90 天删除哪些记录...因此我们不会永远保留这些操作
我提出的当前 mysql 查询是
SELECT act.*,
img.Title, img.FileName, img.Rating, img.isSafe, img.allowComment AS allowimgComment,
blog.postTitle, blog.firstImageSRC AS blogImg, blog.allowComments AS allowBlogComment,
event.Subject, event.image AS eventImg, event.stimgs, event.ends,
imgrate.Rating
FROM member_action act
LEFT JOIN member_img img ON (act.actionType="imgAdd" OR act.actionType="imgUpdate")
AND img.imgID=act.refID AND img.isActive AND img.isReady
LEFT JOIN member_blogpost blog ON (act.actionType="blogAdd" OR act.actionType="blogUpdate")
AND blog.id=act.refID AND blog.isPublished AND blog.isPublic
LEFT JOIN member_event event ON (act.actionType="eventAdd" OR act.actionType="eventUpdate")
AND event.id=act.refID AND event.isPublished
LEFT JOIN img_rating imgrate ON act.actionType="imgRate" AND imgrate.UserID=act.UserID AND imgrate.imgID=act.refID
LEFT JOIN member_favorite imgfav ON act.actionType="imgFavorite" AND imgfav.UserID=act.UserID AND imgfav.imgID=act.refID
LEFT JOIN img_comment imgcomm ON (act.actionType="imgComment" OR act.actionType="imgCommentReply") AND imgcomm.imgID=act.refID
LEFT JOIN blogpost_comment blogcomm ON (act.actionType="blogComment" OR act.actionType="blogCommentReply") AND blogcomm.blogPostID=act.refID
ORDER BY act.actionDate DESC
LIMIT XXXXX,20
好的,基本上,考虑到我将每周删除超过 90 天左右的操作...使用此查询来显示成员操作历史记录是否有意义?
或者我应该在member_actions表中添加一个名为 [actionData] 的新文本列,我可以在其中以 json 或 xml 格式存储一些详细信息,以便快速查询 member_action 表。
它增加了表的大小并降低了查询的复杂性,但该表将定期从旧条目中清除。
假设最终我们将拥有不超过 100k 的成员,所以我会担心 member_action 表的表大小,它的文本 [actionData] 列将包含一些特定的细节。
我倾向于 [actionData] 模型,但任何建议或考虑将不胜感激。
另一个考虑因素是 img 或 blog 的表条目可能会被删除......所以我可以采取行动但没有参考记录......这确实会增加问题。
提前致谢