2

我目前正在开发自己的博客系统。目前,当您创建新帖子时,您可以选择将其归档为您自己选择的类别。

目前,我将类别作为 VARCHAR 值存储在 mysql 数据库中。例如,如果用户选择了 ID 为 2、4 和 8 的类别,则该字段将包含 2、4、8。

要检索 ID 为 4 的类别的博客文章,我然后使用:

SELECT col FROM table WHERE LOCATE(',4,', CONCAT(',',col,','))

有人告诉我,当涉及到良好的数据库结构时,用十进制逗号分隔的值是不可行的(非常糟糕)!

任何人都可以为我提供一个好的方法/技术来使它成为最有效的方法吗?

提前致谢

4

2 回答 2

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;
于 2010-08-05T21:06:15.553 回答
0

查看关系数据库规范化。对于您的特定情况,请考虑在您的博客内容表之外创建 2 个附加表、类别和 BlogCategories。类别包含所有标签/类别的定义,仅此而已。BlogCategories 表是一个多对多交叉引用表,在您的情况下,它可能只包含对 Blog 表的外键引用和对 Categories 表的外键引用。这允许 1 个博客条目与多个类别相关联,并且允许 1 个类别与多个博客条目相关联。

在最坏的情况下,获取数据不会比 3 表连接更困难,而且您将脱离子字符串业务来确定我们的业务逻辑。

于 2010-08-05T21:07:36.347 回答