我目前正在尝试创建一个电子邮件样式的Web应用程序,以允许我的网站的用户相互联系。我为此创建了一个SQL表,该表具有以下标题:
- 编号
- 发件人标识
- 收件人标识
- 时间戳
- 消息
- read (用于记录收件人是否已读取邮件的布尔值(
- 已加星标(用于记录邮件是否已按收件人加星标的布尔值(
- 已存档(用于记录收件人是否已存档邮件的布尔值(
- 已删除(用于记录收件人是否已删除邮件的布尔值(
- 康维德
我现在开始意识到这张桌子是不够的。例如,如果对话已由用户加星标,这不会告诉我 2 个用户中的哪一个为 convo 加了星标,等等。
任何人都可以建议一种避免上述问题的方法,并可能建议更好的数据库结构吗?
我建议将你的表格一分为二,让我们称它们为"消息"和"星号"。因此,它们是:
message
-------
id
sender_id
recipient_id
timestamp
read
archived
deleted
convo_id
parent_id
star
----
message_id
user_id
timestamp
如您所见,我在消息中添加了parent_id。如果你不需要分层结构 - 你可以踢这个专栏。星表提供了增强星形功能的可能性。谁知道呢,也许将来所有用户都可能放一颗星,而不仅仅是对话的参与者。
此外,还有一篇关于数据库规范化的好文章。它将真正帮助您构建组织良好的数据库结构: 什么是规范化(或规范化(? http://www.studytonight.com/dbms/database-normalization.php http://searchsqlserver.techtarget.com/definition/normalization
取决于您的应用程序以及您将拥有的用户数量。 关于加星标、已存档和其他两个用户都可以执行操作的内容,您可以使用enumeration
或简单地使用几个值。不仅仅是布尔值。 或者,您可以使用senderRead
拆分每个读取并recipentRead