0

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。除了每个组仍然由其组件字段定义。核心问题是,当每个组的定义部分由不同表的内容组成时,如何确保每个组都是唯一的?我认为索引不可能。

4

0 回答 0