相关疑难解决方法(0)

实现标签的方法 - 各自的优点和缺点

有关

使用SO作为示例,如果您预计它们会经常更改,那么管理标记的最明智的方法是什么?

方式1:严重非规范化(逗号分隔)

table posts
+--------+-----------------+ 
| postId | tags            |
+--------+-----------------+
|   1    | c++,search,code |

这里的标签是逗号分隔的.

优点:使用单个select查询一次检索标记.更新标签很简单. 更新简单,便宜.

缺点:对标签检索进行额外解析,很难统计有多少帖子使用哪个标签.

(或者,如果仅限于5个标签)

table posts
+--------+-------+-------+-------+-------+-------+
| postId | tag_1 | tag_2 | tag_3 | tag_4 | tag_5 |
+--------+-------+-------+-------+-------+-------+
|   1    | c++   |search | code  |       |       | 

方式2:"稍微规范化"(单独的表,没有交叉点)

table posts
+--------+-------------------+
| postId | title             |
+--------+-------------------+
|   1    | How do u tag?     |

table taggings
+--------+---------+
| postId | tagName |
+--------+---------+ …

sql tags

27
推荐指数
1
解决办法
7913
查看次数

基于Mysql json的趋势标签实现

我正在尝试使用mysql json功能识别时间序列中的趋势标签(基于最大命中).下面是我的表

CREATE TABLE TAG_COUNTER (
    account       varchar(36) NOT NULL,
    time_id       INT NOT NULL,
    counters      JSON,
    PRIMARY KEY   (account, time_id)
)
Run Code Online (Sandbox Code Playgroud)

在每个web api请求中,我将为每个帐户获取多个不同的标签,并根据标签的数量,我将准备INSERT ON DUPLICATE KEY UPDATE查询.下面的示例显示了带有两个标记的插入.

INSERT INTO `TAG_COUNTER`
  (`account`, `time_id`, `counters`)
VALUES
  ('google', '2018061023', '{"tag1": 1, "tag2": 1}')
ON DUPLICATE KEY UPDATE `counters` =
  JSON_SET(`counters`,
           '$."tag1"',
           IFNULL(JSON_EXTRACT(`counters`,
                        '$."tag1"'), 0) + 1,
           '$."tag2"',
           IFNULL(JSON_EXTRACT(`counters`,
                        '$."tag2"'), 0) + 1
  );
Run Code Online (Sandbox Code Playgroud)

time_id是yyyyMMddhh,它是每行的每小时聚合.

现在我的问题是treding标签的回溯.下面的查询将为我提供tag1的聚合,但在进行此查询之前我们不会知道这些标记.

SELECT
SUBSTRING(time_id, 1, 6) AS month,
SUM(counters->>'$.tag1')
FROM TAG_COUNTER
WHERE counters->>'$.tag1' > 0
GROUP BY month; …
Run Code Online (Sandbox Code Playgroud)

mysql json analytics time-series

6
推荐指数
1
解决办法
426
查看次数

如何制作像stackoverflow.com这样的标签系统?

我打算建一个网站贴标签.标签最多可以包含五个标签,例如stackoverflow.com.

谁能告诉StackOverflow的标签系统?具有post和tag的关系数据库系统.

我应该在post表中添加一列还是应该为它创建单独的标记表?标签可以用空格或逗号分隔.

database tags relational-database

5
推荐指数
1
解决办法
1331
查看次数

实现标签的最佳方式(类似于StackOverflow)

可能重复:
您如何建议实施标签或标记

我有一个网站,其中包含一些包含大量文章的数据库.我想实现类似于stackoverflow上的标签的标签.

我可以想到实现它们的两种基本方法:

  1. 创建一个单独的Tags表,其中包含与Articles表的一对多关系.

  2. 将标签文本字段添加到我的文章表.

第一种方法似乎是最好的,但需要两个额外的表,这些表会变得非常大.似乎还有相当大的开销更新和维护数据.

第二种方法更容易实现和维护,并且使用更少的资源.但搜索效率会降低.我可能会使用LIKE甚至是全文搜索.

我对其他人认为最好的方法很感兴趣.或许还有另一种方法.

sql-server asp.net algorithm

3
推荐指数
1
解决办法
2590
查看次数