Sql 在一列中存储多个标记

Sql 在一列中存储多个标记,sql,database,entity-relationship,Sql,Database,Entity Relationship,目前,我正在尝试构建一个数据库,其中存储与文件相关的详细信息,例如作者、创建日期以及最重要的标记 我不知道如何为一个文件存储多个标记,我能想到的最简单的方法是将它们全部存储为一个超链接字符串。但这就提出了一个问题,即在windows应用程序的列表视图中将标记显示为链接,以及如何使用此方法筛选搜索结果 我有一个更复杂的想法,就是创建一个单独的标签表,为每个标签分配一个唯一的3位整数,该整数将作为多个标签的组合长整数存储 e、 g 然后,如果所有三个标记都与文件相关,则将它们存储在文件详细信息中,作

目前,我正在尝试构建一个数据库,其中存储与文件相关的详细信息,例如作者、创建日期以及最重要的标记

我不知道如何为一个文件存储多个标记,我能想到的最简单的方法是将它们全部存储为一个超链接字符串。但这就提出了一个问题,即在windows应用程序的列表视图中将标记显示为链接,以及如何使用此方法筛选搜索结果

我有一个更复杂的想法,就是创建一个单独的标签表,为每个标签分配一个唯一的3位整数,该整数将作为多个标签的组合长整数存储

e、 g

然后,如果所有三个标记都与文件相关,则将它们存储在文件详细信息中,作为
001002003

如果我这样做,我是否必须在我的应用程序中将每个mod声明为类“mod”的对象,然后重新分配一个指向每个标记值的超链接,并将标记作为标记对象的集合存储为每个mod的属性?这是一个感觉良好的想法还是我把它复杂化了

编辑:

仍处于开发的早期阶段,尚未测试它的实现,但目前我正在查看大约50-100个标签


我将如何构建文件到标签表?我对关系数据库建模相当陌生,我更擅长使用CSV来存储数据,但这不是很有效

这是桥牌桌的好例子。假设您的数据库中有:

file_info
---------
file_id
author
create_date

tag_info
--------
tag_id
tag_name
tag\u id
是一个代理键,对于每个新标记都是唯一的递增值。所以它可能看起来像:

tag_id  tag_name
------  --------
     1  Apples
     2  Pears
     3  Peaches
然后创建桥,该桥将文件链接到适用的标记:

file_tag_bridge
---------------
file_id
tag_id
文件id/标记id的组合在表中是唯一的(它是一个复合键),但给定的文件id可能与多个(不同)标记id相关联,反之亦然

对于与文件关联的每个标记,此表中将有一行:

file_id   tag_id
-------   ------
      1        1
      2        2
      2        3

在这种情况下,文件1与
Apples
标记相关联;文件2与
Pears
Peaches
关联。文件3未与任何标记关联,因此未在桥接表中表示

因为您正在以某种方式对标记进行编码,所以我假设您有一组预定义的所有可能的标记?如果是这样的话,那是多少个标记?为什么不将它们存储在一个files_to_tags表中?创建一个表来存储所有标记,每个标记都有一个唯一的id。创建另一个表,使用文件id和标记id为文件和标记的每个组合创建一个记录。这样,您可以获得一个或多个标记的所有文件,或者一个文件的所有标记。您使用的是哪种DBMS?神谕博士后?谢谢那真的帮了我的忙!
file_id   tag_id
-------   ------
      1        1
      2        2
      2        3