MySQL 5.5
我正在编写一个存储查询的系统。
每次提交搜索时,都可以将其保存在数据库中。可以有其他操作连接到搜索。
即。 “查找color = red或color = blue并将color_type更改为'primary color'”的行
我的问题是,由于所涉及的表的数量,没有什么可以防止同一查询被保存两次。
查询的基本部分是查询本身,而不是附加的操作。
例如,如果某人碰巧输入了与上述相同的查询但使用“将color_hue更改为90%”的操作,则应将其操作附加到上一次搜索。
截至目前,它将创建重复搜索。
当然,如果将它保存在带索引的单个表中,这一切都会很容易,但事实并非如此。
我有:
search_terms
id | search_terms (varchar 255 UNIQUE)
searches
id | table_to_search
search_groups
id | search_id (FK to searches.id) | search_terms_id (FK to search_terms.id) | search_exclude (bool)
`search_exclude` determines whether to match the terms or exclude them.
target_fields
id | field_name
search_groups_target_fields (linking table for many-to-many relationship between search_groups and target_fields)
search_group_id (FK1) | target_field_id (FK2)
(composite unique index on FK1+FK2)
那么当每个搜索的事实位于3个不同的表中时,如何强制执行这些搜索的唯一性?
每次搜索都可以有多个搜索组。每个搜索组可以有很多字段,反之亦然。
我还想到了这个潜在的变化,将search_id FK从搜索组中删除并将其放入链接表中,允许多对多搜索到组。
search_groups
id | search_terms_id (FK to search_terms.id) | search_exclude (bool)
searches_search_groups
search_id (FK) | search_group_id (FK)
但现在search_groups
与search_terms
没什么不同。除了每个组仍由其组件字段定义。这个问题的核心问题是,如果每个组的定义部分由不同表的内容组成,我怎样才能确保每个组都是唯一的?我不认为索引是可能的。