我目前正在尝试创建一个电子邮件风格的网络应用,以允许我的网站用户互相联系。我为此创建了一个SQL表,其中包含以下标题:
我已经开始意识到这个表不够用。例如,如果对话已由用户加星标,则不会告诉我两个用户中哪一个已加星标等等。
任何人都可以建议一种避免上述问题的方法,并建议更好的数据库结构吗?
答案 0 :(得分:1)
我建议将你的桌子分成两部分,让我们把它们称为“消息”和“明星”。所以,他们是:
message
-------
id
sender_id
recipient_id
timestamp
read
archived
deleted
convo_id
parent_id
star
----
message_id
user_id
timestamp
如您所见,我将parent_id添加到消息中。如果您不需要分层结构 - 您可以踢这个专栏。星表可以增强主演功能。谁知道,也许将来所有用户都可能会成为明星,而不仅仅是谈话的参与者。
此外,还有一篇关于数据库规范化的好文章。它将真正帮助您构建组织良好的数据库结构: What is Normalisation (or Normalization)? http://www.studytonight.com/dbms/database-normalization.php http://searchsqlserver.techtarget.com/definition/normalization
答案 1 :(得分:0)
取决于您的应用程序以及您将拥有多少用户。
关于星标,存档和其他用户可以执行操作的内容,您可以使用enumeration
或仅使用几个值。不只是一个布尔值。
或者,您可以使用senderRead
和recipentRead