GUID (Global Unique Identifier), global olarak benzersiz olarak üretilen 128 bit uzunluğunda bir veridir. GUID terimi, UUID (Universal Unique Identifier) standardının Microsoft Windows platformuna adapte edilmiş versiyonuna verilen isim olsa da Oracle Database, Openview, dBase gibi birçok yazılım ve veritabanı platformu da aynı isimlendirmeyi kullanmaktadır.
128 bitlik GUID verisi, 8-4-4-4-12 şeklinde bir gruplandırma ile 32 karakterlik hexadecimal kod olarak gösterilir. Örnek bir GUID verisi “3F2504E0-4F89-11D3-9A0C-0305E82C3301” şeklindedir.
Bir GUID verisi RFC 4122’de belirtilen algoritmaya göre beş farklı şekilde üretilebilir. Bu algoritmaya göre herhangi bir kişi bir GUID üretebilir ve benzersizliğin garantisi için merkezi bir otoriteye ihtiyaç duyulmaz. İki farklı GUID’nin aynı olma olasılığı matematiksel olarak tamamen sıfır olmasa da çok düşük bir olasılıktır. Örnek olarak %50 ihtimal birbirinin aynısı olan iki GUID oluşturmanız için 2,71 quintillion (milyon x milyon x milyon) GUID oluşturulmuş olması gerekiyor.
GUID Kullanım Yerleri
GUID verisi yazılım dünyasında farklı amaçlarla kullanılabilmektedir.
- Veritabanındaki kayıtlara klasik INT veri türleri dışında global anlamda benzersiz bir id numarası verilmesi gereken projelerde GUID kullanılabilir.Örnek olarak birden fazla şirketin veritabanlarının entegre edildiği bir proje yürütüyorsanız GUID kullanabilirsiniz.
- “Unique” verinin kullanımının garanti altına alınması gereken yerlerde GUID kullanılabilir. Örnek olarak bir dosya upload arayüzünün olduğu web tabanlı bir uygulamanız varsa aynı dizine yüklenen dosyaların farklı dosya isimleri almasını garanti altına almak için GUID kullanılabilir
- Hesap doğrulama için eposta gönderilen uygulamalarda hesap doğrulama için unique bir url oluşturmak için kullanılabilir.
- GUID’ler güvenlik amacıyla da kullanılmaktadır. Eğer web uygulamanızda “www.example.com/GetCustomerInfo?CustomerId=120” örneğinde olduğu gibi url parametresi olarak bir id numarası gönderiyorsanız uygulamanızda bir açık oluşturursunuz. Örnekteki gibi 120 id’li bir müşteri varsa 121,122 id’li müşteriler de var demektir bu bilgi üzerinden farklı yetkisiz erişim denemeleri yapılabilir.
Bu kullanım alanları dışında GUID kullanımının bazı dezavantajları da bulunmaktadır. Birincisi veritabanında daha fazla alan kullanırsınız. GUID olarak tuttuğunuz veritabanı kolonları INT veya BIGINT tipinde tutacağınız kolonlardan daha fazla disk alanı kullanacaktır. Bunun dışında GUID tipindeki alanları Primary Key veya Foreign Key olarak belirlediğiniz takdirde bu alanlar diğer sayısal veri tipleri gibi indekslenemeyeceği için performans problemleri ortaya çıkacaktır. Bu problemin çözümü için sıralı bir şekilde GUID oluşturulmasını sağlayan Sequential GUID yapısı geliştirilmiştir.
SQL Server’da GUID Kullanımı
SQL Server’da NEWID() fonksiyonu ile GUID üretebiliyoruz. Fonksiyonun kullanımı SQL’de oldukça kolaydır. Fonksiyon her çalıştığında farklı bir GUID üretecektir.
SQL Server 2008 versiyonundan itibaren desteklenmeye başlanan NEWSEQUENTIALID() fonksiyonu ile sıralı GUID oluşturma imkanı sağlanmaktadır. Bu fonksiyon sayesinde GUID verisi içeren kolonların indeks olarak kullanılması durumunda ortaya çıkan performans problemlerinin önüne geçilebilmektedir. NEWSEQUENTIALID fonksiyonunun sadece Default Constraint olarak kullanılmasına izin verilmektedir. NEWID fonksiyonu gibi SELECT ile birlikte kullanılamaz. SELECT ile kullanılmaya çalışıldığı zaman aşağıdaki gibi bir hata mesajı alınacaktır.
Yeni bir tablo oluşturulurken NEWSEQUENTIALID varsayılan fonksiyonu ile oluşturulan key alanı tabloya yeni kayıtlar eklendikçe otomatik olarak sıralı şekilde artacaktır.
SQL Server’a benzer şekilde diğer veritabanı yönetim sistemleri ve programlama dillerinde GUID üreten fonksiyonlar bulunmaktadır.