独特的照片命名 - GUID与序号

时间:2009-09-01 22:33:01

标签: c# database ms-access file

前段时间我为我所工作的理事会编写了一个计划管理系统,它允许我们以数字格式存储所有新旧计划,并通过访问数据库存储相关信息(我不知道MS SQL服务器)当时)。

每个计划都有一个唯一的计划ID,它只是一个自动递增的int(主键),一个标题和图片的路径。当时,我只使用GUID作为图片名称以确保唯一性,我只是想知道这是不是一个坏动作。

导入时所有图片都会移动到一个中央文件夹中,因此名称必须是unqiue。

我在想,也许我应该只使用自动递增int作为文件的名称,而不是长而不是非常用户/调试友好的GUID。

你会做什么?

编辑:抱歉忘了提到这些文件实际上只有软件知道,导入后程序会创建一个文件的快捷方式,该文件夹是从原始文件的名称导入的文件夹中。我这样做是为了让人们仍然可以访问文档而无需通过程序,所以旧的超链接等工作。

8 个答案:

答案 0 :(得分:6)

通常,整数键更快,但如果您不小心,在某些情况下可能会遇到存档和复制问题。如果您没有性能问题/问题,我会倾向于使用GUID。

无论如何,我建议您允许用户为UI中显示的每个图像指定一个“友好”名称。

答案 1 :(得分:2)

据我所知,这些图片只能由软件本身使用,而不是直接由人类使用。 如果我找不到令人信服的改变理由,我会保持原样。

答案 2 :(得分:2)

如果您有任何复制或“脱机工作”的计划,那么我建议您对表格的文件名和pk使用GUID。

答案 3 :(得分:2)

Access中的GUID有几个问题。这些都在这里概述:

http://trigeminal.com/usenet/usenet011.asp?1033

我永远不会在Access应用程序中使用它们,除非有外部依赖项需要它们。

如果您要存储照片并且需要唯一性,则随机自动编号将提供超过足够大的数字空间来存储任何实际应用程序将要创建的任意数量的图形文件。除非您在独立位置添加,否则甚至没有任何理由 - 标准递增的自动编号将很好,并且非常适合多用户环境(并且对于单用户环境完全顺利)。

所以,不 - GUID不是一个好的选择,它们似乎也没有你在原始问题中描述的任何东西。

答案 4 :(得分:1)

取决于;是用户使用/看到/引用的文件名,还是仅由软件引用的文件名?用户是否“知道”了计划的ID,然后有机会查看磁盘上的文件名?

我怀疑我刚刚使用计划ID作为文件名,如果答案是“不,不” - 尽管在这种情况下我没有看到使用GUID的任何真正的缺点。

答案 5 :(得分:1)

如果用户不直接访问该中央文件夹中的文件,我会在内部使用GUID并向用户显示友好名称。

如果用户直接与中央文件夹进行交互,我会使用碰撞检测算法在数据库中使用GUID并在文件中使用友好名称

extension = getFileExtension();
filename = getFriendlyName();
int i = 1;
while (File.Exists(filename)) {
    filename = getFriendlyName() + (i++);
}
writeFile(filename+extension);

请记住,通过在每个字母(A \,B \等)或字母组合中将子文件夹放在该中央文件夹中,您可以更轻松地进行检索

答案 6 :(得分:1)

那里有安全/许可问题吗?增量数字允许您轻松迭代一系列整数以提取所有图像,使用GUID将不那么简单。

答案 7 :(得分:1)

当您需要在多个系统上识别图像时,GUID非常有用。例如,将图像从系统复制到另一个系统然后再返回。当您将其复制回来时,唯一的GUID将提供一种可靠的识别方式。

但如果只有一个系统要访问它们,那么自动增加数字会更实用。实际上,如果您只在单个系统上创建重复ID,那么GUID将更有可能仍然生成重复ID,尽管您可能不得不使用一百万个GUID或更多GUID或更多,然后重复的可能性从统计上没有变为统计上非常小

就个人而言,当我需要在多个系统上创建数据时,我只倾向于使用GUID。这将允许我唯一地识别它们。但是在单个系统上,我只是使用增量数字并继续增加它直到......好吧,如果可能的话,永远。 32位整数仍然有20亿个可能的数字。 64位整数将使您更进一步。

在GUID或整数之间进行选择以使名称更加用户友好?为什么?如果您想要用户友好的名称,请让用户提供...