我正在我的问答应用程序中实现标记。用户将被限制在应用程序可用的标签上,因此他们无法选择自己的标签。所以也许只有30-50个标签可以买到。不过,这种情况在未来可能会有所改变,但就目前而言,这是一笔交易。
我正在考虑两种选择:
备选案文1:
试题表: id、标题等
标签表: id、名称、question_id
这里的问题标签关系是问题有很多标签,标签属于问题。这样,只需要一个连接。但是,如果有多个用户选择例如“酒店”标签,那么这个标签表可能有许多重复的标签。在这种情况下,在获取标记列表时,我将在SELECT语句中按组进行分组。这样,只需要一个表联接。
备选方案2:
试题表: id、标题等
questions_tags表: id、question_id、tag_id
标签表: id,名称
这样可以消除重复,所以如果两个用户选择“酒店”表,那么“酒店”就不会存储两次。但是,它需要两个联接:问题(连接) questions_tags (连接)标记。
从性能的角度来看(在这两种情况下,不需要花费时间来使用数千个问题/标记来创建测试),哪一种比另一种更好?只有一个表联接的组通常比两个表联接要快吗?在那里可能有数千个问题,每个都有自己的几个标记?
发布于 2015-03-22 06:39:01
正如您所提到的,我将采用备选方案2来消除重复。我不确定这里的联接和分组对性能的影响,但我确实认为它是数据的更清晰的表示。
也就是说,我会考虑使用像Neo4J或土卫六这样的图形数据库。它简化了查询这些类型的关系。
https://softwareengineering.stackexchange.com/questions/276998
复制相似问题