使用数据库中的值存储数组

时间:2011-07-05 16:46:36

标签: mysql sql json

我有以下数据要保存在我的数据库中(这用于通过第三方API发送短信)

text_id, text_message, text_time, (array)text_contacts

text_contacts包含一个包含所有contact_id

的普通数组

如何将数据正确存储在MySQL数据库中? 我以两种方式思考自己:

  1. 使用json_encoded中的contact_id创建数组(不需要序列化,因为它不是多维的)字符串,并将其存储在DB的文本字段中
  2. 使用text_id创建第二个表,并在新行上创建所有contact_id ..
  3. 注意:存储在text_contacts数组中的数据需要随时更改。

    note2 :数据用作单独的contact_id以从联系人处获取电话号码,并检查短信是否实际已发送..(结合使用text_id和phonenumber)

    效率更高,为什么?

4 个答案:

答案 0 :(得分:3)

这完全取决于您的预期使用特征。如果您有近期需要根据contact_id进行查询,请按照第二个解决方案单独存储它们。如果您将它们存储起来用于存档目的,并且不希望它们被动态使用,那么您可以节省时间并将它们存储在JSON字符串中。这都与使用有关。

答案 1 :(得分:1)

IMO,请使用第二个表格,将text-id映射到contact-id。比将所有联系人存储在一个字段中更容易操作

答案 2 :(得分:1)

这个话题会带来不少意见,但我的信念是:第二张表,无论如何。

  1. 如果您遇到实际需要搜索该数据的情况,则在使用之前不需要您解析它。
  2. 调试更容易(出于同样的原因)
  3. json_encode和json_decode(或等效的)比连接花费的时间要多得多。
  4. 即使在大多数情况下不需要,延迟加载也更容易。
  5. 其他人会发现它更具可读性,并且具有良好的架构定义,更易于概念化和维护。

答案 3 :(得分:1)

几乎所有实现都会使用一个表来存储每个text_contacts,然后第二个表将使用外键来引用text_contacts表。所以,如果说你有一个表text_contacts看起来像这样:

contact_id  |  name
    1       | someone
    2       | someone_else

一个看起来像这样的短信表:

text_id  | text_message  |  text_time | text_contact
   1     |   "Hey"       |   12:48    |      1
   2     |   "Hey"       |   12:48    |      2

已发送消息的每个联系人在文本消息表中都有一个新条目,最后一列引用text_contacts表的contact_id字段。这种方式使得通过联系人检索消息变得更加容易,因为您可以说“select * from text_messages where text_contact = 1”而不是搜索单个表上的每个数组,以查找特定用户发送的消息。