【问题标题】:PHP/MySQL - Using json encoded data instead of multiple columns in databasePHP/MySQL - 使用 json 编码数据而不是数据库中的多列
【发布时间】:2012-07-20 02:00:31
【问题描述】:

我想知道使用某种序列化数据,无论是 json 编码还是序列化等,是否比在 mysql 数据库中使用多个列更好。

示例: 如果我有一个“用户”表,一些列通常是:id、全名、用户名、电子邮件、密码等。

但是如果我使用 json 数据而不是所有这些列呢?我可以在我的数据库表(id,数据)中只使用 2 列吗?所以我可以在 php 中做这样的事情:

json_encode(array('username' => $_POST['username'], 'password' => md5($_POST['password'])));

然后将其插入到包含“数据”列的表中,该列将保存 json 编码的数组。

稍后在脚本中,我可以检索“数据”列并使用json_decode($stuff_from_db, true)

如果这是一个愚蠢的问题,我很抱歉,我对 mysql 及其扩展方式等并不是很了解。但我想知道这是个好主意还是坏主意。

谢谢

【问题讨论】:

    标签: php mysql database json


    【解决方案1】:

    不,这不是一个好主意,这会使RDBMS 中的关系消失。如果不必先解析每一行的结果,您将无法快速查询表中的任何内容。在小规模上这还可以,但如果您想使用 MySQL 来存储数据,那么 MySQL 就不会成为要使用的数据库。

    想象一下,如果您使用序列化或 JSON 编码来存储数据库,则尝试从数据库中获取以下内容:

    获取名字为“John”的用户数

    【讨论】:

      【解决方案2】:

      您可以这样做,但那将是非常糟糕的设计,因为您的数据不再是原子的。这对搜索不利,因为需要扫描表格...

      【讨论】:

      • 最细粒度的数据。
      【解决方案3】:

      是的,这是个坏主意。使用这样的数据库确实效率低下,例如查询WHEREJOIN 查询,可能不可能这样做

      另外,如果您愿意创建一个从 JSON 编码的数据库中获取一些信息的 API,那么将您的 JSON 编码的数据转换为 XML 之类的东西需要更多的代码行。

      一件小事,当您只需要特定的东西(例如要显示的全名)时,您必须选择有关用户的所有信息,这又是低效的。

      【讨论】:

        【解决方案4】:

        对于某些类型的数据,它可能会起作用。但是对于您给出的示例,这不是一个很好的主意。如果将其存储为 json 或序列化值,则将无法搜索。

        您将如何正确地进行以下查询

        Select * from <table_name> where user_name="<user_name>"
        

        您可以声称可以进行通配符搜索。但我不会这样做。

        我还认为,如果你有正确的场景,你应该存储 json 而不是序列化的值。如果您存储序列化值,那么其他系统(如果存在)将无法与该值交互,因为它们是用不同的语言编写的。

        【讨论】:

          猜你喜欢
          • 2018-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多