我有一个包含联系人的表,另一个包含留言。在消息表中,我有一个单元格,其中保存了发送消息的那些成员的序列化ID字符串。
现在,我将附加一个唯一的标识符令牌,当成员响应时,我将能够跟踪它是哪个成员。我应该将此信息存储在单独的表中,还是将另一个单元格添加到消息表中,这些表还可以包含一串响应的成员?
逻辑告诉我一个单独的表会更容易,但同时它可以快速增长,因为可能有多组消息接收者,并且每个消息可以有多个消息,这些消息将转换为多行,如与具有序列化字符串的单个单元格相对。
答案 0 :(得分:2)
单独的表格很可能会更容易,更快捷。
例如,如果您要查找发送给特定用户的所有邮件,则这将是一个简单的查询:WHERE recipient = id
。此查询将表现良好,因为它可以使用索引。
如果您在文本字段中将其存储为逗号分隔的ID列表,则必须使用例如FIND_IN_SET
编写查询。此查询将无法使用索引。
答案 1 :(得分:1)
创建单独的表格。首先存储序列化的成员串是一个错误的决定。在这样的领域上查询既麻烦又缓慢。
创建一个单独的交叉链接表,将成员绑定到消息,以便您可以实际查询它。然后,您可以向该表添加“已响应”字段,以标记成员是否已响应。
答案 2 :(得分:1)
我认为传统方法是连接表。因此,如果您有一个Contacts
表和一个Messages
表,则可以创建一个ContactMessagesSent
表,其中包含Contacts
和Messages
的主键。列,用于跟踪哪些消息发送到哪些联系人。您可以创建另一个联接表ContactMessagesReceived
来跟踪回复。
所以
ContactMessagesSent
--------
contact_id ; // primary key of Contacts
message_id ; // primary key of Messages
...
如果使用正确的索引,即使表中有很多行,它也会表现良好。