【问题标题】:Storing array with values in database在数据库中存储带有值的数组
【发布时间】:2011-09-28 23:41:18
【问题描述】:

我有以下数据要保存在我的数据库中(用于通过第 3 方 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 在新行上..

注意:存储在 text_contacts 数组中的数据确实不需要随时需要更改。

note2:数据作为个人的contact_id,从联系人那里获取电话号码,检查短信是否真的发送了..(text_id和phonenumber的组合)

什么更有效,为什么?

【问题讨论】:

  • 赞成将其作为 json 数组存储在同一行中。

标签: mysql sql json


【解决方案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”,而不是搜索单个表上的每个数组来查找特定用户发送的消息。

【讨论】:

    【解决方案2】:

    这个话题会带来很多意见,但我的信念是:无论如何,第二张桌子。

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

    【讨论】:

      【解决方案3】:

      这完全取决于您预期的使用特性。如果您近期需要根据contact_ids 进行查询,请像在第二个解决方案中一样独立存储它们。如果您出于存档目的而存储它们,并且不希望它们被动态使用,那么您也可以节省时间并将它们存储在 JSON 字符串中。一切都与使用有关。

      【讨论】:

        【解决方案4】:

        IMO,使用第二个表,将文本 ID 映射到联系人 ID。比将所有联系人存储在一个字段中更容易操作

        【讨论】:

        • 重点是,数组中的数据根本不需要改变。
        • 是的,但是假设您获得了一个联系人 ID,并且想要对其进行一些操作,那么使用第二个表会更容易。但这完全取决于您的要求。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-06
        • 2011-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-19
        相关资源
        最近更新 更多