1. 程式人生 > >為什麼建議使用Guid結構體做為資料庫及排序時的主鍵

為什麼建議使用Guid結構體做為資料庫及排序時的主鍵

在.net2.0中,Guid結構體表示一個全域性唯一識別符號,是一個在生成時就可以肯定為全世界唯一的16位元組值。Guid在資料庫中通常可以作為各種排序的主鍵。比如

1  public class Company
2     {
3         public Guid id { get; set; }
4         ......
5     }

其中Guid可以表示值範圍總共有2128或者3.4x1018個值。

可以呼叫靜態的Guid.newGuid方法創件一個新的唯一的Guid;

在vs code裡直接dotnet new console -n test建立控制檯專案,寫入測試程式碼:

 1 using System;
 2 using static System.Guid;
 3 using static System.Console;
 4 namespace test
 5 {
 6     class Program
 7     {
 8         static void Main(string[] args)
 9         {
10             Guid newGuid1 = Guid.NewGuid();
11             WriteLine(newGuid1.ToString());
12         }
13     }
14 }

然後在powershell裡cd test,進行dotnet build及dotnet run;

PS C:\Users\huang\source\repos\資料結構\Guid> dotnet build
用於 .NET Core 的 Microsoft (R) 生成引擎版本 16.4.0+e901037fe
版權所有(C) Microsoft Corporation。保留所有權利。

  C:\Users\huang\source\repos\資料結構\Guid\Guid.csproj 的還原在 35.37 ms 內完成。
  Guid -> C:\Users\huang\source\repos\資料結構\Guid\bin\Debug\netcoreapp3.1\Guid.dll

已成功生成。
    0 個警告
    0 個錯誤

已用時間 00:00:01.10
PS C:\Users\huang\source\repos\資料結構\Guid> dotnet run
664a92a8-70cd-46ec-b8e5-f7aba10d6127
PS C:\Users\huang\source\repos\資料結構\Guid>

可看到生成了一個16位元組值。

當然,也可以直接使用構造器例項化一個現有的Guid,比如

 class Guid1{
        int _x;
         public Guid(int x) { _x = x; }
        }

    }

當以字串形式出現時,Guid是一個由32個16進位制數字表示。

Guid newGuid2 = Guid.NewGuid("664a92a8-70cd-46ec-b8e5-f7aba10d6127");

Guid是一個結構體,支援值型別的語義,Guid有一個ToByteArray方法可以將其轉換為一個位元組陣列,其中Guid.Empty靜態屬性可以返回一個空的Guid,通常用來表示nul