对于标签数据库,最好是为每个标签存储文件名还是按文件名存储标签?

时间:2013-12-09 20:04:25

标签: c# tags protobuf-net

我想写一个管理个人文件的文件标签的小应用程序。它会非常简单,但我不确定是否应该为每个唯一标签存储文件名,即:

"sharp":
file0.ext file1.ext file2.ext file3.ext

"cold":
file1.ext file2.ext

"ice":
file3.ext

或者,如果我应该为每个文件名存储标签,即:

file0.ext:
"sharp"

file1.ext:
"sharp" "cold"

file2.ext:
"sharp" "cold"

file2.ext:
"sharp" "ice"

我想使用能够提供最佳性能和/或最佳设计的方法。由于我从未做过这样的事情,我认为正确的方法可能不是最优的。

只是提供有关该应用的更多信息:

  1. 我会按标签搜索文件。我只需要能够输入我的标签,以便查看哪些文件匹配,然后双击打开它们等等。

  2. 我将使用protobuffers(Marc的版本)来保存和加载数据库。

  3. 数据库大小并不重要,因为我会在我的电脑上使用它。

  4. 我认为我的文件不会超过50K。我最有可能获得20K最大值,因为这些主要是个人文件,所以我不可能创建/收集更多。

  5. 编辑:我忘了提及另一个功能。由于这将是为文件定义标签的相同应用程序,因此当我选择文件时,我需要它来加载文件所有的标签,以便我可以显示它们以防我想要编辑它们。

3 个答案:

答案 0 :(得分:1)

这一切都与您想要搜索数据有关...因为您说要按标签搜索文件,那么您的第一种方法将是最简单的,因为您只需要读取数据文件的一小部分

如果你真的想要简单,你可以为每个标签设置一个单独的数据文件(即sharp.txt,cold.txt,ice.txt),然后在文件中只有一个文件名列表。

答案 1 :(得分:1)

如果您按标签搜索,这似乎是更合适的索引。查找文件上的所有标记可能会导致一些性能损失,如果这是您需要做的事情。

或者,如果您确实要支持这两种情况:同时存储两者,您可以根据需要查询它们。这会创建一些数据重复,当更改/添加文件时,您需要额外的逻辑来更新两个数据集,但它应该非常简单。

答案 2 :(得分:1)

在这种情况下,你有很多标签,很多文件和很多关系,我建议使用relational database。如果您没有大量数据,我认为您不应该关心它。

无论如何,我想即使您确实想要保存纯文本文件中的关系,也应遵循database normalization中的原则。主要目标是避免数据重复。在您的模型中,标签和文件将具有多对多关系。即使数据存储在纯文本文件中,我也会模仿关系数据库的结构。我会有一个文件,其中包含文件名,每个文件名一个ID,另一个文件包含标签,每个标签一个ID。第三个文件将包含关系。简单,将文件保持在最小尺寸。

希望我帮忙!