个人用户看到通知的数据库模型

时间:2012-10-18 04:21:52

标签: mysql database model

我正在寻找为我的应用程序设置mySQL数据库的最佳解决方案。

我的应用程序就像一个布告栏,上面有两个部分,“新通知”和“看到通知”。

现在,当用户查看了通知时,他们点击了一个按钮,它从New移动到Seen。但只适合这个人。

每个人都可以查看所有通知 - 但不一定在同一部分 - 因为用户将在不同时间查看它们并在不同时间查看它们。

我的猜测是所有通知都有一个表“Notices”,还有一个名为“Seen”的单独表格,其中包含“UserID”和“noticeID”行。这意味着对于每个通知,它将需要查阅“看到”表以查明是否应该显示它。这是理想的还是有另一种方式?

3 个答案:

答案 0 :(得分:0)

拥有一个带有NoticeID和UserID的表是正确的,我还会添加查看日期。

答案 1 :(得分:0)

您可以使用3个表

  1. 用户
  2. 通告
  3. SeenNotices(可能不是最好的名字)
  4. 在SeenNotices表中有三列UserID,NoticesID,HaveSeen。有HaveSeen列将告诉您用户是否已看到它。

答案 2 :(得分:0)

你的思维方式应该有效,尽管随着时间的推移,你最终会得到一个非常大的“看见”。表,不可扩展。一个简单的选择是使用'看不见的'而是表。这样,当人们查看通知时,表格会变小,您也可以删除非常旧的条目(旧通知可能不再相关,因此如果它们未显示为用户看不见则无关紧要。)

使用'看不见的'表格您的查询将如下所示:

SELECT n.notice_id, n.notice_msg, IF(u.user_id, 'new', 'seen') AS status
FROM notice n
LEFT JOIN unseen u ON (u.user_id = $user_id AND n.notice_id = u.notice_id)
WHERE user_id = $user_id;