【问题标题】:Disadvantages of storing all the columns inside a JSON column将所有列存储在 JSON 列中的缺点
【发布时间】:2019-05-31 10:05:36
【问题描述】:

将表的所有列存储在单个 JSON 列中的缺点是什么?

例如对于用户表而不是这个

Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('firstname');
        $table->string('lastname');
        $table->string('username')->unique();
        $table->string('email')->unique();
        $table->string('password');
        $table->timestamps();            
        $table->rememberToken();
    });

就这样做

Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
    $table->json('attributes'); // contains all the fields
        $table->timestamps();   
        $table->rememberToken();
    });


更新

简而言之,这种方法不适用于具有自定义属性的产品。 NoSql 数据库是电子商务网站/系统的最佳选择。

但 JSON 字段可用于组合较少使用的字段,如性别、年龄、地址。

真的吗?

【问题讨论】:

  • 希望我的结论是正确的。对所有字段使用 JSON 会增加额外的数据层和工作量。此外,这就像将 SQL 用于其他目的一样,因此如果所有字段都替换为 JSON,则最好使用 NoSQL 数据库。归根结底,这完全取决于我们应该选择哪种数据库类型的业务需求。
  • 可以查询JSON,JSON函数很多,缺点是非结构化,所以可能和schemaless数据库一样缺点。 mariadb.com/resources/blog/json-with-mariadb-10-2

标签: json database laravel


【解决方案1】:
  • 无法查询json数据
  • 在反序列化之前,您会得到一个长而丑陋的字符串
  • 您将在获取/插入(即编码和解码)期间手动处理 json 列内容,这会导致消耗服务器资源。

【讨论】:

    【解决方案2】:

    有很多缺点,但我想提三个。

    1. 您将无法通过 sql 以干净的方式查询您的表中的数据。
    2. 您必须自己处理实体数据,消耗服务器资源。
    3. 由于解析过程和手动处理,以这种方式存储数据更容易损坏。

    这不是sql存储的目的。 也许您可以探索诸如 MongoDb 等基于文档的数据库之类的选项

    【讨论】:

      【解决方案3】:

      您无法正确转换数据。查询和过滤json可能会很痛苦,你不能使用外键,如果你从其他表中保存id,如果你犯了错误并删除了所有列就不太好了,你会丢失所有数据而不是工作列按列。

      看看这两个答案:

      Storing JSON in database vs. having a new column for each key

      Is there any advantage/disadvantage of storing field value as a JSON array rather than creating new table and one-to-many relationship bet them?

      【讨论】:

        猜你喜欢
        • 2021-10-28
        • 1970-01-01
        • 2019-09-15
        • 2020-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-14
        相关资源
        最近更新 更多