在一列中存储多个标签

时间:2013-12-11 12:46:18

标签: sql database entity-relationship

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

我不确定如何为一个文件存储多个标签,我能想到的最简单的方法是将它们全部存储为一串超链接。但这引发了能够在列表视图中将标签显示为Windows应用程序中的链接以及如何使用此方法过滤搜索结果的问题。

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

e.g。

001 - tag1
002 - tag2
003 - tag3

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

如果我这样做,我是否必须在我的应用程序中将每个mod声明为类“Mod”的对象,然后将超链接重新分配给每个标记值并将标记存储为Tag对象的集合作为每个mod的属性?这是一个可以收费的想法还是让我过度复杂?

编辑:

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

我如何构建files_to_tags表?我对关系数据库建模还不熟悉,我更擅长使用CSV来存储数据,但效率不高!

1 个答案:

答案 0 :(得分:2)

这是桥表的一个很好的例子。假设您在数据库中有:

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

tag_info
--------
tag_id
tag_name

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

tag_id  tag_name
------  --------
     1  Apples
     2  Pears
     3  Peaches

然后创建桥,将文件链接到适用的标记:

file_tag_bridge
---------------
file_id
tag_id

file_id / tag_id的组合在表格中是唯一的(它是复合键),但是给定的file_id可能与多个(不同的)tag_id相关联,反之亦然。 / p>

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

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

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