MySQL列json vs连接

时间:2017-03-01 05:24:49

标签: php mysql json laravel-5

我遇到假日包库存项目的数据库设计,其中包含用于存储包信息的主表packages

这是字段

  1. id PK
  2. package_name varchar
  3. 景点json eg-field:[' super',' funny'],
  4. 包含json eg-field:[' hello',' cool']
  5. 一个包装可能有许多吸引力和内容,这就是我选择json字段的原因。

    这是一种诽谤的方式,还是将其中的吸引力和内容保存在另一个具有外键关系的表中?

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

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

1 个答案:

答案 0 :(得分:1)

这取决于您预见项目的复杂程度。您可以使用现有的表配置并利用JSON搜索功能,但随着表的增大,这将成为一个越来越大的性能问题。 最好创建4个表,包,包含,景点和关系。

  • ID(int)PK
  • 名称(varchar)

景点

  • ID(int)PK
  • 名称(varchar)

夹杂物

  • ID(int)PK
  • 名称(varchar)

关系

  • ID(int)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*/