【发布时间】:2017-02-28 10:10:59
【问题描述】:
我有一个列出露营地的数据库 有一个主表 tblSites,其中包含唯一数据,例如名称、坐标、地址等,还包括每个设施的列,例如厕所、水、淋浴、电气等,其中只有 1=Yes,Null=no 这将通过类似
的内容进行搜索从 tblSites WHERE Water = 1 AND Toilets = 1 中选择 id
还有另一个相关的表 tblLocations 包含位置类型(即靠近大海、农村、山脉、河流等)。 这意味着该表有很多列,如果我想添加新类别,则不允许轻松更新。 这将包含在这样的搜索中
从 tblSites AS M 中选择 M.id、L.* 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,%' AND 设施 LIKE '%4,%' AND 位置 LIKE '%1,%')
是否有更好的查询可用于查看该字段是否包含数组字符串中的键号?
【问题讨论】:
-
在
where条件see this documents中使用JSON类型列并使用JSON_CONTAINS@lifeson等函数 -
你让情况变得更糟了。将您的一对多关系建模为正确的一对多关系,而不是将它们拆分为列或包含 JSON 字符串。