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

001 - tag1
002 - tag2
003 - tag3

如果三个标记都与文件相关,则将它们作为001002003存储在文件详细信息中。
如果我这样做,我是否需要在应用程序中将每个mod声明为类“mod”的对象,然后重新分配到每个标记值的超链接,并将标记存储为标记对象的集合作为每个mod的属性?这是一个让人感觉不到的主意还是我把它搞得太复杂了?
编辑:
仍然处于开发的早期阶段,还没有测试出它的实现,但目前我正在看大约50-100个标签。
如何构造文件到标记表?我对关系数据库建模还比较陌生,我更擅长使用csv来存储数据,但这不是很有效!

最佳答案

这是摆桥牌的好箱子。假设你的数据库中有:

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

文件id/标记id的组合在表中是唯一的(它是一个复合键),但是给定的文件id可能与多个(不同的)标记id相关联,反之亦然。
对于与文件关联的每个标记,此表中将有一行:
file_id   tag_id
-------   ------
      1        1
      2        2
      2        3

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

10-04 11:14