我正在创建一个包含数千个项目的网站。除其他事项外,用户可以投票将标签分配给具有以下逻辑的商品:
[the number of votes for that tag] ≥ 0.5 * [the number of votes for the most voted tag]
(在问题内)的位置。我是SQL的新手,我想知道如何用标签最好地填充项目。
我希望双方都可以访问该关系。也就是说,我希望能够获得所有tags
的所有item
和所有items
的所有tag
的。
技术堆栈为:
我可以看到两种主要的实现方法:
解决方案1 :在查询项目或标签时,对投票进行计数和分组,然后选择符合上述第3点条件的投票。
解决方案2 :当用户投票时,进行相同的计算并将标记保存在联结表中。
据我所知,数据库的MWE设置包含以下4个表:
user TABLE
- id
- (...)
question TABLE
- id
- (...)
tag TABLE
- id
- (...)
votes TABLE
- user_id
- question_id
- tag_id
如果选择了解决方案2,则会添加第5个表:
question_tag TABLE
- question_id
- tag_id
在开发过程中,我设法使两个设置都能正常工作。
对于解决方案1,我喜欢没有数据冗余。但是,这种关系不太直接定义,并且查询“其他”数据有点混乱-两种方法都必须如此。
对于解决方案2,我(基本上)将相同的数据存储两次。但是,关系查询要简单得多,而且性能可能更高(我希望对项目和标签的查看都比对投票要简单得多)。
因此,从本质上讲,我的问题可以归结为:哪种方法被认为是更好的做法-并且有更好的方法来实现这一目标吗?
谢谢!