我目前正在开发自己的博客系统。目前,当您创建新帖子时,您可以选择将其归类为您自己选择的类别。
目前我将类别存储为mysql数据库中的VARCHAR值。例如,如果用户选择ID为2,4和8的类别,则该字段将包含2,4,8。
要检索ID为4的类别的博文,我会使用:
SELECT col FROM table WHERE LOCATE(',4,', CONCAT(',',col,','))
我被告知,当涉及到良好的数据库结构时,用小数逗号分隔的值是不行的(非常糟糕)!
有人能为我提供一种好方法/技巧,使其成为最有效的方法吗?
提前致谢
答案 0 :(得分:1)
灵活的&强大的设置,在SO中发布了这么多次:
POSTS
id
name
text
CATEGORIES
id
name
POST_CATEGORIES
post_id
category_id
当前查询的位置为:
SELECT p.id, p.name, p.text
FROM posts p
JOIN post_categories pc
ON pc.post_id = p.id
AND pc.category_id = 4;
答案 1 :(得分:0)
查看关系数据库规范化。对于您的特定情况,请考虑在博客内容表之外另外创建2个表,类别和BlogCategories。类别包含所有标签/类别的定义,而不包含任何其他内容。 BlogCategories表是一个多对多的交叉引用表,在您的情况下可能只包含对Blog表的外键引用和对Categories表的外键引用。这允许1个博客条目与多个类别相关联,1个类别与多个博客条目相关联。
获取数据并不比最糟糕的3表连接困难,并且您将不在子串业务中来计算我们的业务逻辑。