【问题标题】:Storing serialize array in database?将序列化数组存储在数据库中?
【发布时间】:2016-09-17 10:09:00
【问题描述】:

我们正在构建一个基于 crm 的应用程序,并且我们正在使用 PDO 来访问数据库。我们有各种模块,如联系人、潜在客户、帐户等。在这些模块中,我们允许用户添加他们的多个信息,比如用户可以添加多个电话号码、电子邮件和地址以及电子邮件的类型(工作、个人)。 所以为了保存这些多重信息,我们在数据库中使用序列化数组,例如:对于多封电子邮件,我们将序列化数组存储在数据库的电子邮件列中。

序列化格式:

a:2:{i:0;a:1:{s:5:"value";s:15:"test1@gmail.com";}i:1;a:1:{s:5:"value";s:15:"test2@gmail.com";}}

我们想确认这种方式以后在使用过滤等时可能不会产生问题。所以任何人都可以建议我们这是将多个信息存储在数据库中的正确方法吗?

【问题讨论】:

  • 我们也在 MySQL 中存储序列化数组(例如在用户权限中),我们对此没有任何问题。
  • 为什么不只为用户提供一个表,在其中保存数据,这只是一种(如姓名等),每个人都有一个 ID,然后有另一个表,其中您将所有可能有多个实例的数据保存在另一个表中,其中包含用户 ID?这是使用数据库示例的正确方法:用户 Jon Doe。您将 name = Jon last_name = Doe 保存在第一个表中。 ID 设置为自动递增,因此他得到 ID = 1。然后设置您在表 2 中插入的所有其他数据,仅对于 ID,您使用要为其设置数据的人的 ID。
  • 好吧,您将无法过滤/排序/数据库中的任何内容。您必须检索数据并使用自己的代码完成所有操作,而不是使用做得更好的现有功能。此外,数据库中的序列化数组就像数据库中的数据库,这是一个非常糟糕的主意。

标签: php arrays database


【解决方案1】:

我当然可以确认,这种方式会在以后使用过滤等时产生很多问题

一般来说,这种方法严重违反了非常关系型数据库架构。只要你把你的数据库当作一个傻傻的key-value存储就可以了,但是如果你要把你的数据库当作一个数据库使用就绝对不能接受。

数据库结构的主要规则应该是:每个实体都必须单独存储。这样就可以使用标准 SQL 机制访问它。

解决当前情况的一种可能方法是创建一个包含三列的表:

user_id, param_name, param_value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多