如何在MySQL中存储复杂的数据结构并防止重复?

时间:2013-05-22 01:58:14

标签: mysql database-design data-structures object-model

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_groupssearch_terms没什么不同。除了每个组仍由其组件字段定义。这个问题的核心问题是,如果每个组的定义部分由不同表的内容组成,我怎样才能确保每个组都是唯一的?我不认为索引是可能的。

0 个答案:

没有答案