2016-11-21 70 views
0

我有一个简单的消息系统:用户向组发送消息。在简单的聊天应用程序中存储不同类型的“消息”

我试图尽可能地规范化,并正确地做事情,以便模式可以在需要时进化。

我决定有一张存储每条消息的表格,还有一张用于不同类型消息的表格。

但我发现这个问题。对message的查询没有意义,因为它们不会生成消息。您必须分别查询message_imagemessage_text。这使我认为我的模型是错误的。

message 
------- 
+ id (int) 
+ group_id (int) 
+ sender_id (int) 
+ created_at (timestamp) 

message_image 
------------- 
+ id (int) 
+ title (varchar) 
+ url (varchar) 
+ created_at (timestamp) 

message_text 
------------ 
+ id (int) 
+ message (varchar) 
+ created_at (timestamp) 

这样做有什么不利吗?

+0

您是否每封邮件有多个图片和/或每张图片有多封邮件? – WillardSolutions

+0

@EatPeanutButter每条消息只有一个图像。每封邮件有一条短信。它可以是一个或另一个,而不是两个。 – BugHunterUK

+0

所以你可以添加一个外键约束到'message'引用'message_image'以及一个外键约束在'message'引用'message_text'?然后,你可以在'message'中查找行,如果你真的想在不同的表中分开文本和图像,那么这些列<> NULL,那么你可以查找行。 – WillardSolutions

回答

1

将外键约束添加到message引用message_image以及在message引用message_text的外键约束。然后,您可以在消息中查找那些列<> NULL的行。