【问题标题】:MySQL columns json vs joinsMySQL 列 json 与连接
【发布时间】:2017-03-01 05:24:48
【问题描述】:

我被假日包裹库存项目的数据库设计困扰,该项目包含一个用于存储包裹信息的主表packages

这是字段

  1. id PK
  2. package_name varchar
  3. 景点 json eg-field: ['super','funny'],
  4. inclusions json eg-field: ['hello','cool']

一个包可能有很多景点和内容,这就是我选择json字段的原因。

那么这是一种诽谤方式还是将景点和包含在另一个具有外键关系的表中??。

如果我选择第二种方法(即景点和包含物的不同表),那么搜索具有特定吸引力的包裹怎么办认为搜索需要连接查询(使用连接搜索是一种不好的做法??。)。

但在第一种方法中,我们可以应用 json 搜索(MySQL 版本 >5.7 支持 json 搜索)。

【问题讨论】:

    标签: php mysql json laravel-5


    【解决方案1】:

    这取决于您预计项目的复杂程度。您可以使用现有的表配置并利用 JSON 搜索功能,但是随着表变得越来越大,这将是一个越来越大的性能问题。 最好创建 4 个表,Packages,Inclusions,Attractions 和 Relations。

    • ID(整数)PK
    • 名称(varchar)

    景点

    • ID(整数)PK
    • 名称(varchar)

    内含物

    • ID(整数)PK
    • 名称(varchar)

    关系

    • ID(整数)PK
    • PID (int) FK - 包
    • RID (int) 包含或景点的 ID
    • type (varchar) 表示包含或吸引

    然后您可以进行连接以选择类型的任意组合并将任意数量的类型相互关联。

    SELECT * FROM Packages p join Relation r ON p.ID = r.PID AND r.type = "Attraction" Left Join Attractions a ON a.ID = r.RID WHERE p.id = 1 /*specific package id*/
    

    【讨论】:

    • as your table gets bigger this will be a bigger and bigger problem for performance 能不能详细点
    • 在你的例子中为什么需要Relations 表??
    • 从其他问题来看,连接仍然比 json 搜索维护关系更有效。 mysql-performance-json-vs-joins 我认为 json 搜索旨在更多地用于替换 json 数据的 blob,使其可查询和可连接,而不是替代维护对象关系。关系表只是集中存储对象关系,并避免解析包中的多值字段。
    • 也许我在考虑你的用例,如果你存储的只是作为包元的单词,那么 json 搜索可能就是你要找的。如果您要存储有关景点和包含物的更多信息而不仅仅是名称,那么我会为它们创建额外的表格。
    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多