Vor-und Nachteile der Verwendung von MD5-Hash der primäre Schlüssel ist gegen die Verwendung eines int-identity, die als Primärschlüssel in der SQL Server -

Ich habe eine Anwendung, um mit einer Datei und fragment auf mehrere Segmente, speichern Sie das Ergebnis in der sql server-Datenbank. Es gibt viele duplizierte Datei (vielleicht mit verschiedenen Datei-Pfad), damit ich zuerst gehen Sie durch alle Dateien und berechnen Sie den Md5-hash für jede Datei, und markieren Sie duplizierte Datei mit dem [Dupliziert] - Spalte.

Dann den Alltag, werde ich diese Anwendung ausführen und die Ergebnisse speichern in der [Ergebnis] - Tabelle.
Das db-schema ist wie folgt:

    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])
    )

Und ich haben eine Anforderung zum beitreten dieser 2-Tabelle auf FileMd5Hash.

Da die Anzahl der Zeilen von [Ergebnis] ist sehr groß, ich möchte noch hinzufügen, dass ein int-Identity-Spalte beitreten, um diese Tabellen wie folgt:

    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])
    )

Also, Was ist der vor-und Nachteile von diesen 2 Möglichkeiten?

  • Bitte beachten Sie, dass die MD5-Algorithmus produzieren kann doppelte Werte für völlig unterschiedliche Daten. Überprüfen Sie wikipedia, es hat mehr details. Ich denke, mit int id ist besser, als es indiziert wird effizienter
  • Nicht genug Informationen, um zu verstehen, was Sie versuchen zu tun und warum müssen Sie möglicherweise eine identity-Spalte.
InformationsquelleAutor ricky | 2014-05-20
Schreibe einen Kommentar