我有一个数据库列出的营地 有包含独特的数据,例如名称的主表tblSites,坐标,地址等,也包括每个设施如,空调,水,淋浴柱,电等在那里,这些都只是1 =是,空=无 这就要通过一些搜索类似数据库设计 - 使用JSON来存储信息
SELECT ID FROM tblSites在水= 1和厕所= 1
有包含另一个相关的表tblLocations位置类型(即靠近大海,农村,山区,河流等) 这意味着该表有很多列,并且不允许f或者如果我想添加一个新的类别,可以轻松更新。 这将被包括在如搜索这个
SELECT M.id,L. * FROM tblSites为M LEFT JOIN tblLocation AS L ON M.ID = L.ID WHERE M.water = 1 AND L.river = 1
我所考虑的是补充说,将包含的设施作为编号键如一个JSON字符串列如设施[1,3,4,12]每个数字代表一个可用的设施和另一列在相同的格式,例如[1,3,5]
这确实让我减少表的大小,并添加额外的设施或场所,无需添加额外列,但它是一个好主意性能明智的位置吗?
即搜索现在会是这样的
SELECT ID FROM tblSites WHERE(设施LIKE '%1%' 和设施LIKE '%4%' 和位置,如 '%1%')
是否有更好的查询可用于查看该字段是否包含数组字符串中的键号?
使用JSON类型列在'where'条件[见本文件(https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html)和使用功能,如' JSON_CONTAINS' @lifeson – MohaMad
你的情况更糟糕。将您的一对多关系建模为适当的一对多关系,而不是通过将它们拆分为列或包含JSON字符串。 –