SQL关系问题

时间:2013-07-04 22:33:53

标签: sql

我正在创建一个应用程序,该应用程序将搜索名为tags的表,以查找使用这些标记标记的事件。将有两个表:tagsevents,当用户搜索某些内容时,应用会搜索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表中的eventsJSON等列中,我不想限制用户可以附加到事件的标记数。但是,我不想依赖我的应用程序来执行SQL的主要处理,因此我不希望将标记存储为表中的{{1}}对象。这是可能的,还是我必须改变搜索方式?

2 个答案:

答案 0 :(得分:3)

你这里有N:N的关系。可以将多种类型的标签添加到多个不同的事件中。您需要创建另一个表来将它们链接在一起:例如tags_per_event表。

tags表中,您只存储有关标签本身的信息(id,description ..)。在events表中,您只描述事件(id,description,source ...)。最后,在tags_per_event表中,每个事件的每个标记都有一行。对于每一行,您将拥有标记的ID和事件的ID。当您查找信息时,您需要加入3表,以获取有关哪些标签分配给哪个事件的所有信息以及您对这些信息的信息(添加说明等)。

enter image description here

答案 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
    

解释:

  • 活动1:问题标签" sql"和" oracle"
  • 活动2:问题标记为" oracle"