我遇到假日包库存项目的数据库设计,其中包含用于存储包信息的主表packages
。
这是字段
一个包装可能有许多吸引力和内容,这就是我选择json
字段的原因。
这是一种诽谤的方式,还是将其中的吸引力和内容保存在另一个具有外键关系的表中?
如果我选择第二种方法(即景点和内含物的不同表格),那么搜索具有特定吸引力的包时会认为搜索需要连接查询(使用连接搜索是一种不好的做法?)。
但是在第一种方法中我们可以应用json搜索(MySQL-version> 5.7支持json搜索)。
答案 0 :(得分:1)
这取决于您预见项目的复杂程度。您可以使用现有的表配置并利用JSON搜索功能,但随着表的增大,这将成为一个越来越大的性能问题。 最好创建4个表,包,包含,景点和关系。
包
景点
夹杂物
关系
然后你可以做连接来选择任何类型的组合,并将它们中的任意数量相互关联。
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*/