"/>"/>
Yazılım Dilleri
Asp.Net 4.5 Kitabı
Skip Navigation Links

GUID Nedir? - Globally Unique Identifier

İnsanları birbirinden kesin çizgilerle ayıran özellikler nelerdir ? İlki parmak izi. Hiçbir insanın parmak izi başka bir insanınkine benzemez dünyada 3.000.000.000 civarında insan olmasına rağmen. Bir

 İnsanları birbirinden kesin çizgilerle ayıran özellikler nelerdir ? İlki parmak izi. Hiçbir insanın parmak izi başka bir insanınkine benzemez dünyada 3.000.000.000 civarında insan olmasına rağmen. Bir diğer özellik iris(göz) olarak söyleniyor fakat hala %100 emin olunamıyor bu konuda. Üçüncü özellik ise avuç içinin toplar damar haritasının her insanda farklı olduğuna dair bir görüş, hatta bu konu üzerine oluşturulmuş güvenlik projeleri hem dünyada hem ülkemizde gerçekleştirilmekte, bu özelliğin ayırt edici bir özellik olduğunun ispatlanması konusunda ciddi çalışmalar yapılmaktadır.

Üretim bandında 2 arabayı birbirinden kesin çizgilerle ayıran özellikler nelerdir ? sorusunu cevapladığımızda motor ve şase numarası yanıtını alıyoruz.
 
2 tane aynı marka, model, renk cep telefonunu kesin çizgilerle ayıran özellikler nelerdir ? sorusunun cevapladığımızda seri numarası yanıtını alıyoruz.
 
Günlük hayattaki bu örneklerin yazılım ile ilgisi ne? Dediğinizi duyar gibiyim. Hemen bağlantıyı kuralım.
Veritabanımızda bir tablomuz var. Bu tabloda tüm kayıtları birbirinden ayıran özellik tablonun primary keyidir. Primary key string ifade de olabilir, tamsayı da olabilir, diğer veritabanı türlerinden de olabilir. Hangi veritabanı türü olursa olsun en çok kullanılan tür Auto Increment özelliği entegre edilmiş Int veri türüdür.
Auto Increment primary key, her tablonun kendi içinde belirtilmektedir. Yani A tablosunda da primary key’i 1 olan bir kayıt olurken B ve C tablolarının primary key’i  1 olan kayıtlar da olabilmektedir.  Peki konuyu biraz farklı noktalara taşıyalım. Bir tabloda belirtilen bir primary key diğer tabloda bulunmasın istiyorum. Örneğin A tablosunda 1 değerli primary key var ise B ve C tablolarında primary key alanında 1 değeri olmasın. Peki bunu kod ile tespit etmek, hele ki çok kullanıcılı bir sistemde çok zahmetli ve masraflı bir durumdur. Peki bu işlemi yapmak istediğimizde nasıl bir yöntem çizmemiz gerekir?
 
Intel’deki büyüklerimiz düşünmüşler, taşınmılar, GUID (Globally Unique IDentifier) diye bir yapı bulmuşlar. GUID, 36 karakterden oluşan ve hiçbir şekilde daha önce oluşturulan GUID’lerle (dünya da kim nerede ne zaman oluşturursa oluştursun) eşleşmeyen string bir ID üretmektedir. Basit olarak incelersek, GUID, bilgisayarınızın MAC adresi, saat, tarih vb. birçok özelliği birleştirerek 36 karakterlik bir string ID üretir. Aslında bu 32 karakterden oluşmaktadır. Arada – karakterlerini de ekleyip 35, bazı sistemlerde 36 karakterden oluşmaktadır.
Şimdi sistemimizde GUID’in nerede işe yarayacağına bir örnek verelim:
Örneğimizi online satış sistemi üzerine kuralım. Sistemde yönetici ve kullanici bilgileri yer almaktadır. Hem yöneticinin hem kullanıcının adres bilgileri yer almaktadır. Yalnız bir yöneticinin ya da kullanıcının birden fazla adresi olabilir. Bu işlem için 1-n ilişki kurulmalıdır. Yani Yonetici 1-n YoneticiAdres ve Kullanici 1 – n KullaniciAdres şeklinde 4 tablo 2 de bağlantı olmalıdır.
 
Size, bu yapıyı gerçekleştirme zorunluluğunu GUID kullanarak aşacağımızı vaad ediyorum. Bakalım gerçekleştirebilecek miyim.
 
 
 
Ortada bir Adres tablom var, hem Yonetici hem Kullanici tablolarım bu tabloyla bağlantı içerisinde. Her iki tablonun primary keyi de KisiId sütununa bağlanıyor. Çünkü Yonetici tablosunun primary keyi YoneticiId GUID ile tanımlanmış, yani başka tablolarla değer çakışması engellenmiştir. Ayrıca aynı işlem Kullanici tablosu için de geçerlidir. Kullanici tablosunun primary keyi Kullanici GUID ile tanımlanmış, yani başka tablolarla değer çakışması engellenmiştir. Bu sebeple, her iki tablonun primary keyleri aynı olmayacağı kesinleştiğinden bu yapıyı kurup 2 tane adres tablosu yerine tek adres tablosunda yapımızı kurup sonuca gidebildik.
 
Peki GUID’in veritabanı işlemlerinde dezavantajı nedir? Dediğimizde, en önemli dezavantajı, milyonlarca kaydın olduğu veritabanlarında primary key olarak GUID tanımlanırsa, indexlemede performans kaybına sebep olacaktır. Projenizin yapısına ve büyüklüğüne göre GUID, Auto Increment ve manual primary key atama işlemlerinin seçimini yapacağınız testlerle belirleyebilirsiniz.
 
 
Veysel Ugur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com
twitter: @vukizmaz
 

Yorumlar (1)

  1. Avatar
    Hakkı Eser

    26.09.2012

    İndexleme mantığına uygun otomatik artış vs oluşturulduğunda arka tarafta log tutup şişirecektir veritabanını. birbirini bu noktada eşitliyor yapı. GUID in geçer not aldığı noktalar çok fazla indexleme mantığınızda siz bir ID ataması yapamazsınız ama GUID ile bunu pek ala yapabilirsiniz. Örneğin bir databasedeki veritabanının scriptini aldınız başka bir yerde insert edeceksiniz bunun için tüm insertlerdeki ID kolon ve değerlerini silmeniz gerekiyor. :) Örneğin bigint değer tipi kullanıyorsunuz pk ' da onunda sisteme basıncı olmuyor mu sanki.

Yorum Yap

Mail listesine katılmak için tıklayınız

Hakkımdaki son bilgilere anlık erişmek için mail listesine katılabilirsiniz.