多种模型类型的数据库消息传递 - 用户,组,全局

时间:2014-01-24 13:23:51

标签: database database-design orm django-models relational-database

我想在网站中实施一个警报消息系统,该系统会向多个用户,多个(不同的数据库表示)或<对所有用户都强烈>全球。

这种行为的良好数据库关系会是什么样的?

1 个答案:

答案 0 :(得分:0)

这是我根据您提供的信息开始的地方......

要发送的警报消息表...

alerts
    id      unsigned int(P)
    message text

+----+---------------------+
| id | message             |
+----+---------------------+
|  1 | The sky is falling! |
|  2 | Some other message  |
| .. | ................... |
+----+---------------------+

一个表格,用于保存有关所有群组的信息......

groups
    id          unsigned int(P)
    name        varchar(20)

+----+---------+
| id | name    |
+----+---------+
|  1 | Group A |
|  2 | Group B |
| .. | ....... |
+----+---------+

关联组和警报的表。每列是它的相应表的外键,它们一起形成主键 - 这将确保没有任何组多次与同一警报相关联。 在我的示例数据中,我们看到A组已经注册了#34;天空正在下降!&#34;和&#34;其他一些消息&#34; B组仅注册&#34;其他一些消息&#34;警报。

groups_alerts
    alert_id        unsigned int(F alerts.id)--\_(P)
    group_id        unsigned int(F groups.id)--/

+----------+----------+
| alert_id | group_id |
+----------+----------+
|        1 |        1 |
|        1 |        2 |
|        2 |        2 |
| ........ | ........ |
+----------+----------+

用户信息表...

users
    id              unsigned int(P)
    username        varchar(32)
    password        varbinary(255)
    ...

+----+----------+----------+-----+
| id | username | password | ... |
+----+----------+----------+-----+
|  1 | bob      | ******** | ... |
|  2 | mary     | ******** | ... |
|  3 | john     | ******** | ... |
| .. | ........ | ........ | ... |
+----+----------+----------+-----+

将用户与警报相关联的表。密钥遵循与groups_alerts表中相同的逻辑。在我的示例数据中,我们看到john已注册&#34;天空正在下降!&#34;消息。

users_alerts
    user_id     unsigned int(F users.id)---\_(P)
    alert_id    unsigned int(F alerts.id)--/

+---------+----------+
| user_id | alert_id |
+---------+----------+
|       3 |        1 |
| ....... | ........ |
+---------+----------+

最后,我们需要将用户与群组相关联。密钥遵循与groups_alerts表中相同的逻辑。在我的示例数据中,我们看到bobGroup A的成员,maryGroup B的成员。

users_groups
    user_id     unsigned int(F users.id)
    group_id    unsigned int(F groups.id)

+---------+----------+
| user_id | group_id |
+---------+----------+
|       1 |        1 |
|       2 |        2 |
| ....... | ........ |
+---------+----------+