我正在创建一个由MySQL数据库支持的系统,并且出现了一个关于什么是最佳实践的问题。
我有一个“群组”实体,其中包含零个或多个"标签"。
表格可以表示为:
Groups
+-------+--------+
| id | name |
+-------+--------+
| 1 | Group1 |
| 2 | Hey Guy|
| 3 | Chacko |
| 4 | Dropo |
+-------+--------+
GroupsTags
+-------+--------+
|idGroup| idTag |
+-------+--------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
+-------+--------+
Tags
+-------+--------+
| id | name |
+-------+--------+
| 1 | Health |
| 2 | Happy |
+-------+--------+
系统,在“组”注册期间,我希望自动完成每个按键,显示最流行的标签,类似于StackOverflow。换句话说,我必须在数据库中为每个字母类型进行查询,按人气排序。
哪种解决方案最好?
什么是最好的?
select count(*) as qt,Tags.nome from GroupsTags
inner join Tags
on Tags.id = GroupsTags.idTag
where Tags.name like "phrase%"
group by GroupsTags.idTag
order by qt desc
或保存在Tags表中,使用它的次数。喜欢这个
Tags
+-------+--------+--------+
| id | name | qtUsed |
+-------+--------+--------+
| 1 | Health | 2 |
| 2 | Happy | 1 |
+-------+--------+--------+
select * from Tags where name like "phrase%" order by qtUsed desc
我想知道是否确实需要使用标签的次数来获得更好的性能。这会是一种不好的做法吗?