1

我正在创建一个应用程序,该应用程序将搜索一个调用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列中的每一个,也不想限制用户可以附加到事件的标签数量。但是,我不想依赖我的应用程序对 SQL 进行主要处理,所以我也不想将标签作为对象存储在表中。这是可能的,还是我必须改变我的搜索方式?tag_id_1tag_id_2eventsJSON

4

2 回答 2

3

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

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

在此处输入图像描述

于 2013-07-04T22:51:06.997 回答
2

恕我直言,您还需要一张桌子。您已经有 TAGS 和 EVENTS,但 TAGS 不应该包含在 EVENTS 表中,因此创建一个 TAGS_EVENTS 表,每个 TAG_ID 和 EVENT_ID 都有一行。

  • 标签表

    ID | NAME 
    1  | sql 
    2  | oracle
    
  • 活动表

    ID | TYPE 
    1  | Question asked 
    2  | Question asked
    
  • TAGS_EVENTS 表

    EVENT_ID | TAG_ID 
    1        | 1 
    1        | 2
    2        | 2
    

解释:

  • 事件 1:使用标签“sql”和“oracle”提出的问题
  • 事件 2:使用标签“oracle”提出的问题
于 2013-07-04T22:40:14.953 回答