【发布时间】:2014-02-15 12:26:10
【问题描述】:
我想在网站中实现一个警报消息系统,它将向多个用户、多个组(不同的数据库表示)或全球对所有用户。
这种行为的良好数据库关系应该是什么样的?
【问题讨论】:
标签: database database-design orm django-models relational-database
我想在网站中实现一个警报消息系统,它将向多个用户、多个组(不同的数据库表示)或全球对所有用户。
这种行为的良好数据库关系应该是什么样的?
【问题讨论】:
标签: database database-design orm django-models relational-database
根据您提供的信息,我将从这里开始......
用于发送警报消息的表格...
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 组同时注册了“天要塌了!”和“其他消息”消息,而 B 组仅注册了“其他消息”警报。
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 注册了“天要塌了!”消息。
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 表中相同的逻辑。在我的示例数据中,我们看到bob 是Group A 的成员,而mary 是Group 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 |
| ....... | ........ |
+---------+----------+
【讨论】:
users 表中的所有用户并将消息发送给他们。我想如果你愿意,你可以创建一个group“全球”并在groups_alerts 表中输入全球消息的记录。
Global 组。而且我不确定您是否必须拥有一个 Global 组 - 这实际上取决于您如何设置应用程序。