我正在创建一个应用程序,该应用程序将搜索名为tags
的表,以查找使用这些标记标记的事件。将有两个表:tags
和events
,当用户搜索某些内容时,应用会搜索tags
表,然后显示events
中相关信息的信息}表。
这是应用程序搜索和显示数据的方式流程:
User searches ->
SQL search on tags table ->
using tag_ids found, search for relevant events on events table ->
display event data
我是否正确地思考这个问题?我有一种感觉,我可能不会。我不想将tag_ids
中的每个tag_id_1
存储在tag_id_2
表中的events
,JSON
等列中,我不想限制用户可以附加到事件的标记数。但是,我不想依赖我的应用程序来执行SQL的主要处理,因此我不希望将标记存储为表中的{{1}}对象。这是可能的,还是我必须改变搜索方式?
答案 0 :(得分:3)
你这里有N:N的关系。可以将多种类型的标签添加到多个不同的事件中。您需要创建另一个表来将它们链接在一起:例如tags_per_event
表。
在tags
表中,您只存储有关标签本身的信息(id,description ..)。在events
表中,您只描述事件(id,description,source ...)。最后,在tags_per_event
表中,每个事件的每个标记都有一行。对于每一行,您将拥有标记的ID和事件的ID。当您查找信息时,您需要加入3表,以获取有关哪些标签分配给哪个事件的所有信息以及您对这些信息的信息(添加说明等)。
答案 1 :(得分:2)
恕我直言,你还需要一张桌子。您已经有TAGS和EVENTS,但TAGS不应包含在EVENTS表中,因此请创建一个TAGS_EVENTS表,每个TAG_ID和EVENT_ID都有一行。
TAGS TABLE
ID | NAME
1 | sql
2 | oracle
活动表
ID | TYPE
1 | Question asked
2 | Question asked
TAGS_EVENTS TABLE
EVENT_ID | TAG_ID
1 | 1
1 | 2
2 | 2
解释: