2013-02-12 17 views
0

我目前拥有一个根据活动类型引用其他表的活动表。如何在MySQL中构建用户活动表?

id | type | user_id | source_id | misc_id | date 

类型列告诉我什么是用户已经执行的活动种类(跟随,招人喜欢,交好,状态等)和源ID包含相对于操作类型表ID。

这对用户活动流很好,但唯一的问题是,我不知道如何处理不再存在于相关表中的行?

E.g.用户创建一个状态然后将其删除,或者用户与稍后从数据库中删除的某个人成为朋友。

如果活动是相对于单一类型,那么我将能够添加一个外键约束,这将删除该行;但是因为它与不同的表格有关,我还可以怎么做呢?

+0

这是什么问题引起的? – Bulat 2013-02-12 21:39:42

+0

因为它返回的结果不再存在于其他表中。如果我对活动的类型运行的开关语句和行不存在,我会得到这样的输出: 山姆成了朋友...... 或者 萨姆喜欢... 的点是空的空间。 – 2013-02-12 21:45:18

+0

好吧,添加日期类型的'Reversed'字段并按它筛选。如果你显示你的SQL,将更容易找到解决方案。 – Bulat 2013-02-12 21:49:13

回答

1

这是我的想法。

如果用户可以删除某些内容,则可以将其记录在活动表中。

我想要隐藏该活动,您可以添加ReversedOn字段并使用相关日期进行更新。那么你只需要过滤掉不存在的活动。

如果这不会导致任何用户体验问题,那么您可以放过它。

1

你将不得不采取这些方法。

  1. 当用户删除,只是软在后端通过标记为删除,而不是从表中删除硬删除。您将不得不在这种方法中引入一个新的“delete_flag”列。

  2. 存档表格并在删除时将记录移动到不同的表格。但是,这将是复杂的编码方式以及性能可能不如预期。

+0

感谢您回答几个问题。 它有什么区别,它会添加删除标志的行,而不是只删除行本身,因为行不再需要。 另外对于用户无法控制的其他事情呢?我有活动,当用户添加新闻和个人资料页面的网站,但我经常从phpmyadmin而不是通过管理部分删除新闻。 – 2013-02-12 22:33:26

+0

当您使用删除标志时,您将能够使用外键约束。应该根据业务逻辑进行处理。每当您为管理员提取活动时,您都必须应用一个约束条件,即delete_flag应该为false。如果您仍想保留数据以便在某处使用,则可以应用此功能。当您认为该记录和其他引用该记录的记录不再需要时,可以删除所有这些记录。 – Slowcoder 2013-02-12 22:38:23