您将如何设计数据库以支持以下标记功能:
理想情况下,使用单个SQL语句查找使用(至少)一组n个给定标记标记的所有项目.由于要搜索的标签数量以及任何项目上的标签数量未知且可能很高,因此使用JOIN是不切实际的.
有任何想法吗?
谢谢你到目前为止的所有答案.
但是,如果我没有弄错的话,给出的答案显示了如何对标签进行OR搜索.(选择包含一个或多个n标签的所有项目).我正在寻找一个有效的AND搜索.(选择所有包含所有n个标签的项目 - 可能还有更多.)
我有3个表,foo,foo2bar和bar.foo2bar是foo和bar之间的多对多地图.这是内容.
select * from foo
+------+
| fid  |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
+------+
select * from foo2bar
+------+------+
| fid  | bid  |
+------+------+
|    1 |    1 |
|    1 |    2 |
|    2 |    1 |
|    2 |    3 |
|    4 |    4 |
+------+------+
select * from bar
+------+-------+------+
| bid  | value | zid  |
+------+-------+------+
|    1 |     2 |   10 | …我是数据库设计的新手.对于cms的产品属性数据库设计有什么更好的选择?(请另外建议其他选项).
选项1:1表
products{
id
product_name
color
price
attribute_name1
attribute_value1
attribute_name2
attribute_value2
attribute_name3
attribute_value3
}
选项2:3表
products{
id
product_name
color
price
}
attribute{
id
name
value
}
products_attribute{
products_id
attribute_id
}
谢谢你,约瑟夫
我正在实现类似于StackOverflow标签系统的标签系统.我在考虑存储标签并与问题相关时,该关系将直接与标签名称相关,或者最好创建字段tagID以将问题与标签"链接"?看起来直接链接到标签名称更容易,但它看起来不太好,主要是为什么在使用统计和/或标签分类(恕我直言)时很难管理这个.另一个问题是当一个管理员决定"修复"标签名称时.如果没有tagID与标签名称分开,那么我将更改表格的键...
你有什么想法?
感谢所有回复.我将删除此帖子,因为有另一篇帖子具有相同的主题.我想知道为什么搜索和建议没有显示给我的结果......