目前,我正在尝试构建一个数据库,存储与文件相关的详细信息,如作者、创建日期,最重要的是,标记。
我不知道如何为一个文件存储多个标记,我能想到的最简单的方法是将它们全部存储为一个超链接字符串。但这就产生了一个问题,即在列表视图中,可以将标记显示为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与Pears
和Peaches
关联。文件3不与任何标记关联,因此不在桥表中表示。