【发布时间】:2019-08-02 22:56:15
【问题描述】:
我有一个应用程序来处理一个文件并将其分成多个段,然后将结果保存到 sql server 数据库中。有很多重复文件(可能有不同的文件路径),所以首先我遍历所有这些文件并计算每个文件的 Md5 哈希,并使用 [Duplicated] 列标记重复文件。
然后,我每天都会运行这个应用程序并将结果保存到 [Result] 表中。 db架构如下:
CREATE TABLE [dbo].[FilePath]
(
[FilePath] NVARCHAR(256) NOT NULL PRIMARY KEY,
[FileMd5Hash] binay(16) NOT NULL,
[Duplicated] BIT NOT NULL DEFAULT 0,
[LastRunBuild] NVARCHAR(30) NOT NULL DEFAULT 0
)
CREATE TABLE [dbo].[Result]
(
[Build] NVARCHAR(30) NOT NULL,
[FileMd5Hash] binay(16) NOT NULL ,
[SegmentId] INT NOT NULL,
[SegmentContent] text NOT NULL
PRIMARY KEY ([FileMd5Hash], [Build], [SegmentId])
)
我需要在 FileMd5Hash 上加入这 2 个表。
由于 [Result] 的行数非常多,我想添加一个 int Identity 列来将这些列加入到表中,如下所示:
CREATE TABLE [dbo].[FilePath]
(
[FilePath] NVARCHAR(256) NOT NULL PRIMARY KEY,
[FileMd5Hash] binay(16) NOT NULL,
**[Id] INT NOT NULL IDENTITY,**
[Duplicated] BIT NOT NULL DEFAULT 0,
[LastRunBuild] NVARCHAR(30) NOT NULL DEFAULT 0
)
CREATE TABLE [dbo].[Result]
(
[Build] NVARCHAR(30) NOT NULL,
**[Id] INT NOT NULL,**
[SegmentId] INT NOT NULL,
[SegmentContent] text NOT NULL
PRIMARY KEY ([FileMd5Hash], [Build], [SegmentId])
)
那么这两种方式的优缺点是什么?
【问题讨论】:
-
请注意,MD5 算法可以为完全不同的数据产生重复值。检查维基百科,它有更多的细节。我认为使用
intid 更好,因为它会更有效地被索引 -
这里没有足够的信息来了解您要做什么以及为什么您可能需要一个身份列。
标签: sql sql-server database hash