构建mySQL

时间:2011-10-13 19:57:50

标签: mysql database-design

我有一个包含联系人的表,另一个包含留言。在消息表中,我有一个单元格,其中保存了发送消息的那些成员的序列化ID字符串。

现在,我将附加一个唯一的标识符令牌,当成员响应时,我将能够跟踪它是哪个成员。我应该将此信息存储在单独的表中,还是将另一个单元格添加到消息表中,这些表还可以包含一串响应的成员?

逻辑告诉我一个单独的表会更容易,但同时它可以快速增长,因为可能有多组消息接收者,并且每个消息可以有多个消息,这些消息将转换为多行,如与具有序列化字符串的单个单元格相对。

3 个答案:

答案 0 :(得分:2)

单独的表格很可能会更容易,更快捷。

例如,如果您要查找发送给特定用户的所有邮件,则这将是一个简单的查询:WHERE recipient = id。此查询将表现良好,因为它可以使用索引。

如果您在文本字段中将其存储为逗号分隔的ID列表,则必须使用例如FIND_IN_SET编写查询。此查询将无法使用索引。

答案 1 :(得分:1)

创建单独的表格。首先存储序列化的成员串是一个错误的决定。在这样的领域上查询既麻烦又缓慢。

创建一个单独的交叉链接表,将成员绑定到消息,以便您可以实际查询它。然后,您可以向该表添加“已响应”字段,以标记成员是否已响应。

答案 2 :(得分:1)

我认为传统方法是连接表。因此,如果您有一个Contacts表和一个Messages表,则可以创建一个ContactMessagesSent表,其中包含ContactsMessages的主键。列,用于跟踪哪些消息发送到哪些联系人。您可以创建另一个联接表ContactMessagesReceived来跟踪回复。

所以

ContactMessagesSent
--------
contact_id ; // primary key of Contacts
message_id ; // primary key of Messages
...

如果使用正确的索引,即使表中有很多行,它也会表现良好。