İndex Kavramı_3
25 Aralık 2016 Pazar
Unique Index bir Index türüdür ve hem CLUSTERED hem de NON-CLUSTERED Index'ler üzerinde kullanılabilirler. Amacı ilgili satırın benzersiz olmasını sağlamaktır. Siz bir kolon için PRIMARY KEY tanımlaması yaptığınızda bu kolon için varsayılan olarak UNIQUE CLUSTERED INDEX ataması yapılır.(Üstelik Index adını da Sql Server kendi tanımlar.) Bu şekilde yapılan tanımlama sonrası, ilgili tablonun alt kırılımında bulunan Keys ve Indexes sekmelerini kontrol ettiğinizde siz de göreceksinizki Primary Key adı ile Index(Unique) Key isimleri aynı. Şuraya varmak istiyorum; siz satırın tekilliği için herhangi bir ek çalışma yapmaksızın sadece primary key(PK) tanımlaması yaparsanız, SQL Server size tekilliği(uniqueness) garanti eder. Tabii olaya tersinden bakacak olursakda PK ataması yapılmayan kolonlar için(Unique constraint de yapılmadı ise) veri tekilliği diye birşey söz konusu olamaz.
Örnek bir Unique NonClustered Index söz dizimine bakalım:
CREATE UNIQUE NONCLUSTERED INDEX
UIX_tblEmployee_FirstName_LastName
ON tblEmployee(FirstName, LastName)
Anahtar Not: Primary Key Constraint, şayet kullanıcı bir seçenek belirtmez ise SQL Server tarafından Clustered Unique Indeks olarak, Unique Constraint ise non-clustered unique indeks olarak gerçekleşir.
Unique Index ve Unique Constraint arasında bir fark var mıdır ?
Uygulama olarak hiç bir fark yoktur ancak siz Unique Constraint tanımlaması yaptığınızda arka planda otomatik olarak Unique Index tanımlaması oluşturulur.
Örnek yazım şekli:
ALTER TABLE tblEmp
ADD CONSTRAINT UQ_tblEmp_Country
UNIQUE (Country)
Burada yapmak istediğim şey, tblEmp tablosundaki Country kolonu için tekilliği sağlamak istiyorum. Indexes sekmesini kontrol ettiğimde parantez içinde bana (Unique, Non-Clustered) tanımını getirecektir. Demek ki UNIQUE sözcüğünden sonra herhangi bir tanım belirtmezsem bana varsayılan olarak Non-Clustered özelliğini atıyor. Ancak ben Clustered özellik olmasını istersem "UNIQUE CLUSTERED (Country)" şeklinde bunu ifade ediyor olmam gerekir. Sonuç olarak ifadeyi CLUSTERED da yapsanız NON-CLUSTERED da yapsanız her 2 türlü de size unique özelliği otomatik olarak garanti edilir.
Bir sonraki makalemde görüşmek üzere.