MS SQL Server İsimlendirme Kılavuzu
SQL Server veritabanı tasarımı ve programlama süreçlerinde kullanılmak üzere belirli, tutarlı bir isimlendirme ve biçimlendirme kılavuzu hedeflenmektedir.
1. Giriş
1.1 Amaç
Bu belgenin amacı SQL Server veritabanı tasarımı ve programlama süreçlerinde kullanılmak üzere belirli, tutarlı bir isimlendirme ve biçimlendirme kılavuzu sunarak, anlamlı, kolay anlaşılabilir bir veritabanı yapısı oluşturmaya ve programlama mantığı üretilmesine, veritabanı genelinde anlamsal ve biçimsel bir bütünlüğün sağlanmasına yardımcı olmaktır.
1.2 Kaynaklar
Bu belge oluşturulurken Database object naming conventions[1] içeriğinden faydalanılmıştır.
1.3 Referanslar
[1] Database object naming conventions, http://vyaskn.tripod.com/object_naming.htm
2. İsimlendirme
2.1 Baş harf yazım biçimleri
Kullanılması uygun iki farklı baş harf yazım biçimi vardır:
PascalCasing
İsmin ilk harfi ve birleştirilen her kelimenin ilk harfi büyüktür. İki harften uzun kısaltmalar dahil tüm nesne isimleri için kullanılabilir.
OrderId
BinNumber
İki harften oluşan kısaltmaların özel biri durumu vardır. İki harf de büyük yazılır.
IOStream
camelCasing
İsmin ilk harfi küçük, birleştirilen her kelimenin ilk harfi büyüktür. İki harften oluşan kısaltmalarda iki harf de küçüktür.
orderId
ioStream
binNumber
Aksi belirtilmedikçe veritabanı nesnelerini isimlendirmek için PascalCasing kullanın.
Hungarian notasyonu kullanmayın.
Hungarian (Macar) Notasyonu Macar notasyonu belirteç isimlerinin veri tiplerini içerecek şekilde tanımlandığı bir isimlendirme şemasıdır. Belgelendirme ve isimlendirmenin bir arada kullanıldığı bir isimlendirme tekniğidir.
Örnek:
strCustomerName
iInstallmentCount
2.2 Genel isimlendirme kuralları
Kelime Seçimi
Kolay okunabilir isimler seçin.
Örneğin,
HorizontalAlignment
adlı bir özellik,AlignmentHorizontal
isminden daha kolay okunabilir bir yapıdadır. (İngilizce için)Kısa olmaya değil, açık olmaya gayret edin.
Macar notasyonu kullanmayın.
Rezerve edilmiş veya anahtar kelimelerden kaçının.
Kısaltmalar
İsimlerin sadece bir parçasından oluşan, kelime sadeleştirme amaçlı kısaltmalar kullanmayın.
Örneğin
GetOrds
yerineGetOrders
olarak isimlendirin.
Yaygın olarak kabul edilmemiş kısaltmalar (kelimelerin baş harflerinden oluşan) kullanmayın ya da yaygınlarsa bile sadece gerektiğinde kullanın.
Diğer Kurallar
Önekler büyük harfle yazılır ve varlığın isminden alt_çizgi ile ayrılır. Varlık isimleri birden fazla kelimeden oluşsa da kelimeler alt_çizgi kullanılarak ayrılmaz.
Nesneleri isimlendirirken boşluk karakteri kullanılmaz. Kullanılmak zorunda kalınırsa isim köşeli parantez içine alınmalıdır.
2.3 Nesnelerin isimlendirilmesi
2.3.1 Tablo
Tabloları isimlendirirken tabloda tutulacak varlığı temsil eden ismi kullanın. Örneğin, ürünlerin saklanacağı tablo için
Product
ismi uygundur.İsimlendirilecek tabloda tutulacak veri birden fazla varlığı veya bu varlıkların ilişkisini temsil ediyorsa, birden fazla adı birleştirerek isimlendirin. Örneğin, siparişin içerdiği ürünlerin saklanacağı tablo için
OrderProduct
gibi.Tabloları isimlendirirken tekil isimler kullanın. Örneğin,
Products
değilProduct
.Tablo isimlerinde, bunun bir tablo olduğunu belirtmek için “
tbl
”, “tbl_
”, “T_
” benzeri önekler kullanmayın.İsimlendirilecek tablolar belli bir mantıksal grup oluşturuyorsa ya da belli bir uygulamanın kullanımı için özel olarak oluşturuluyorsa iki veya üç büyük harften oluşan ve alt_çizgi ile devam eden bir grup öneki kullanabilirsiniz. Örneğin, sadece ERP entegrasyonunu ilgilendiren tablolar için aşağıdaki isimler uygundur.
ERP_Order
ERP_Product
Tüm veritabanı tek bir mantıksal grubu temsil ediyorsa bu önekleri kullanmayın.
2.3.2 View
View nesnelerini isimlendirmek için tablo isimlendirme kuralları kullanılır.
2.3.3 Stored Procedure
Stored procedure nesneleri belli bir işi yapmak amacıyla tasarlandığından isimlendirmede işlemi temsil eden bir fiil ve işlemin uygulanacağı varlığı temsil eden bir ad veya birden fazla adın birleşimini kullanın.
Örneğin,
GetOrderLines
veyaAddOrder
Tablolarda olduğu gibi, ilişkili prosedürleri bir önek ile gruplayın. Örneğin, sipariş işlemleri ile ilgili prosedürleri
ORD_
önekini kullanarak isimlendirmek uygundur.ORD_AddOrder
ORD_AddOrderLines
ORD_UpdateOrder
Temel CRUD (Create, Read, Update, Delete) işlemleri için isimlendirmeler
Add Yeni kayıt eklemek için. Örnek:
Get Sorgulama yaparak kayıt veya kayıt listesi almak için. Örnek:
Update Mevcut kaydı güncellemek için. Örnek:
Delete Kayıt silmek için. Örnek:
Kaçınılması gereken prosedür isimlendirmeleri
Prosedürleri asla “
sp_
” öneki ile isimlendirmeyin. Eğer “sp_
” öneki ile başlayan bir isme sahip bir prosedürü çağırırsanız, SQL Server bu prosedürü önce master veritabanında arar. Ancak orada bulamadığında, kullanıcı veritabanında arar.Stored procedure isimlerinde, bunun bir stored procedure olduğunu belirtmek için “
usp_
”, “sproc_
” benzeri önekler kullanmayın.Aşağıdaki önekler ve benzerlerini içeren isimler prosedürlerde iş mantığı işletildiğini belirtilir. Bu nedenle bu şekilde çalışan ve isimlendirilen prosedürler oluşturulmamalıdır. Kontrollerin veya iş mantığının işletileceği veriler döndürülmeli, işlemler uygulama kodunda yapılmalıdır.
Does Örnek:
Is Örnek:
Has Örnek:
Validate Örnek:
Check Örnek:
2.3.4 Kullanıcı tanımlı fonksiyonlar
Kullanıcı tanımlı fonksiyonları (user defined functions, UDFs) isimlendirmek için stored procedure isimlendirme kuralları kullanılır.
2.3.5 Trigger
Trigger nesneleri özel bir tür stored procedure olsalar da isimlendirmelerinin aynı şekilde yapılması mantıklı değildir.
Trigger nesneleri her zaman bir tabloya bağlı çalıştıklarından trigger nesnesi isimlendirilirken, bağlı olduğu tablonun adı kullanılır.
Trigger nesneleri bir veya daha fazla işlem (Insert, Update, Delete) ile ilişkili olduklarından, isimlendirmede yapılan işlemin adı da kullanılır.
Örnek isimlendirmeler aşağıdaki gibidir:
Product_InsTrg
Product_UpdTrg
Product_DelTrg
Aynı işlem için birden fazla trigger tanımlanırsa, isimlendirmede yapılan işin açıklaması eklenerek trigger nesneleri ayrıştırılır. Örneğin,
Product_ValidateData_InsTrg
Product_MakeAuditEntries_InsTrg
Aynı trigger birden fazla işlem için kullanılıyorsa, “Ins”, “Upd”, “Del” ifadeleri belirtilen sırayla birleştirilerek isimlendirmede kullanılır. Örneğin,
Product_InsUpdTrg
2.3.6 İndeks
İndeksler de trigger nesneleri gibi kendi başlarına var olamayan, bir tabloya bağımlı nesneler olduklarından, isimlerinde tablo ve kolon adlarını kullanmak mantıklıdır.
Ayrıca indeksler clustered ve non-clustered indeksler olarak ikiye ayrılır. Bu iki tip indeks de unique veya non-unique olabilir. Bu nedenle isimlendirme kalıbı tüm bu durumları içerirse anlamlı bir isim oluşturulmuş olur.
Örneğin, Title
tablosunun TitleId
kolonu için tanımlanan unique, clustered indeks adı:
Publisher
tablosunun PubId
kolonu için tanımlanan unique, non-clustered indeks adı:
OrderDetail
tablosunun OrderId
kolonu için tanımlanan non-unique, non-clustered indeks adı:
İndeksler birden fazla kolondan oluşan bileşik bir yapıya sahip olabilir. Bu durumda indeksin uygulandığı kolon adları birleştirilir. OrderLine
tablosunun OrderId
ve OrderLineId
kolonları için tanımlanan unique, clustered indeks adı:
İndeksler belirtilen biçimlerde isimlendirilmezse SQL Server'da tasarım modunda eklenirken otomatik verilen isimler kullanılır.
2.3.7 Kolon
Primary key olan Id kolonları hariç, tüm kolonlar temsil ettikleri varlık özelliğiyle isimlendirilir.
Örneğin, Member
tablosunda yer alan üye adı kolonu aşağıdaki gibidir:
Primary key olan Id kolonları, tablo adını önek olarak kullanarak isimlendirilir.
Örneğin, Member
tablosunda yer alan Id
kolonu aşağıdaki gibidir:
2.3.8 Kullanıcı tanımlı veri tipleri
Kullanıcı tanımlı tipler, veritabanının sağladığı temel tiplerden türetilen sarıcı veri tipleridir. Kullanıcı tanımlı veri tiplerinin isimlendirilmesinde temsil edilecek özelliğin adı ve temel veri tipi birleştirilerek kullanılır.
Örneğin, MemberId
adlı bir veri tipinin ismi:
2.3.9 Primary Key
Primary key, bir tablodaki her kaydı benzersiz olarak belirleyen kolon veya kolonlardır. Primary key isimlendirirken aşağıdaki kalıp kullanılır:
Örneğin, Member tablosundaki MemberId kolonu primary key olarak atanırken aşağıdaki gibi isimlendirilir:
Birden fazla kolondan oluşan primary key isimlerinde kolon adları tabloda tanımlandığı sırayla birleştirilerek kullanılır. Bu şekilde oluşturulan isimler uzun olabilir, ancak primary key doğrudan çağrılan bir nesne olmadığından bu bir sorun teşkil etmez.
Primary key nesneleri belirtilen biçimlerde isimlendirilmezse SQL Server'da tasarım modunda eklenirken otomatik verilen isimler kullanılır.
2.3.10 Foreign Key
Foreign key, ilişkili tabloların aralarındaki ilişkiyi temsil etmekte kullanılır. Referans gösteren tablonun kolon adı ile referans gösterilen tablonun primary key kolonu arasındaki bir bağlantı olarak düşünülebilir.
Foreign key isimlendirmede aşağıdaki kalıp kullanılır:
Örneğin, Order tablosundaki MemberId kolonundan Member tablosundaki MemberId kolonunu referans gösteren foreign key ismi aşağıdaki gibidir:
Foreign key bileşik olabilir. Bu durumda referans gösteren ve gösterilen tabloların kolon adları birleştirilerek kullanılır. Bu şekilde oluşturulan isimler uzun olabilir, ancak foreign key doğrudan çağrılan bir nesne olmadığından bu bir sorun teşkil etmez.
Foreign key nesneleri belirtilen biçimlerde isimlendirilmezse SQL Server'da tasarım modunda eklenirken otomatik verilen isimler kullanılır.
2.3.11 Default ve Check Kısıtları
Default veya check kısıtlarının isimlendirilmesi, kısıtın uygulandığı kolon adının başına “DEF_
” veya “CHK_
” önekleri eklenerek yapılır.
Örneğin, OrderDate
kolonu için default kısıt DEF_OrderDate
olarak, check kısıtı CHK_OrderDate
olarak isimlendirilir.
Default ve check kısıtları belirtilen biçimlerde isimlendirilmezse SQL Server'da tasarım modunda eklenirken otomatik verilen isimler kullanılır.
2.3.12 Değişkenler
Değişkenler için kolon isimlendirme kuralları uygulanır.
3. Biçimlendirme
3.1 Genel
Anahtar kelimeleri büyük harfle yazın. (
SELECT, WHERE, INT, NVARCHAR
, vb.)Büyük-küçük harfle yazım biçimlerini tutarlı olarak kullanın. Büyük-küçük harf yazımına duyarlı olmayan sunucularda sorun çıkmayabilir, ancak büyük-küçük harf yazımına duyarlı olan bir SQL Server veritabanında sorunlar yaşanabilir.
Örneğin büyük-küçük harf yazımına duyarlı bir veritabanında bir tablo oluşturduğunuzda, tabloya yapılan referanslar
CREATE TABLE
ifadesinde belirttiğiniz ifade ile aynı biçimde olmalıdır.CREATE TABLE
ifadesinde tablonun adıOrder
olarak belirtilirse, birSELECT
ifadesindeorder
biçiminde kullanıldığında “Nesne bulunamadı.” hatası alırsınız.IF, CASE, BEGIN
benzeri kod bloklarında blok içeriklerini bir sekme (tab) karakteri kadar içeriden başlatın.
Örnek:
3.2 Sorgular
Stored procedure, trigger ve function gibi nesnelerde yazılan sorgu ifadeleri ve genel ifadelerin beklenen yazım biçimi aşağıdaki örnekte verilmiştir.
SELECT, FROM, WHERE
benzeri anahtar kelimeleri satır başlarına yazın, kendilerinden sonra gelen ifadeleri bir alt satırda, satır başından bir sekme (tab) karakteri kadar içeride yazın.SELECT
ifadelerinde kolon listesindeki her bir kolonu ayrı bir satırda yazın ve bağlı olduğu tablo adını belirtin.WHERE
filtrelerindeAND, OR
benzeri her operatör için yeni bir satıra geçin.ORDER BY
ifadelerinde kolon numarası yerine kolon adı kullanın. Aşağıdaki örneklerden ikincisi birinci örnekten daha kolay okunabilir bir biçime sahiptir.
Örnek 1:
Örnek 2:
Eski tarz join ifadeleri yerine daha kolay okunan ANSI-Standardı join ifadeleri kullanın. ANSI join ifadelerinde, WHERE
bölümü sadece veri filtrelemek için kullanılır. Eski tarz join ifadelerinde, WHERE
bölümü hem join koşulunu hem de veri filtreleme işlemini gerçekleştirir. Aşağıdaki ilk örnek eski tarz join sözdizimini kullanır. İkinci örnek yeni ANSI join sözdizimi ile ifade edilmiştir.
Örnek 1:
Örnek 2:
3.3 Saklı Yordam (Stored Procedure) Şablonu
Aşağıdaki örnekte bir stored procedure yapısı gösterilmiştir. Oluşturulan ve güncellenen stored procedurelerin burada belirtilen formatta olmasını sağlamak, tutarlılık sağlamak açısından önemlidir.
4. Performans
Sorgularda '
SELECT *
' ifadesi kullanmayın. Her zamanSELECT
ifadesinden sonra gerekli kolon adlarını belirtin.
Bu teknik disk I/O işlemini azaltır ve daha iyi performans sağlar.
LIKE
anahtar kelimesini kullanarak arama yaparken, karakterlerin başında asterisk (%) kullanımından kaçının. Bu işlem tam tablo taramasına (full table scan) neden olur ve indeks kullanımının amacını ortadan kaldırır.
İlk örnek indeks taraması (index scan) ile sonuçlanırken ikinci örnek indeks araması (index seek) ile sonuçlanır.
Örnek 1:
Örnek 2:
Eşit değildir operatörlerini (
<>
veNOT
) kullanmaktan kaçının, çünkü tablo ve indeks taramasına neden olurlar.Mümkün olduğunca türemiş tablo kullanın, çünkü daha iyi performans sağlar. Aşağıdaki örnekte
Employee
tablosundan en yüksek ikinci maaş sorgulanır.
Aynı sorgu aşağıdaki gibi türemiş tablo kullanılarak yazılırsa yaklaşık iki kat hızlı sonuçlanır.
Bu sadece bir örnektir ve sonuçlar veritabanı tasarımı, indeksler, veri büyüklüğü gibi konulara bağlı farklı senaryolarda daha farklı olabilir. Daha verimli sorgular yazmak için farklı seçenekleri değerlendirin.
Canlı çalışma ortamında SQL toplu ifadelerinin (batch), stored procedure'lerin and trigger'ların başında
SET NOCOUNT ON
ifadesini kullanın. Bu ifadeINSERT, UPDATE, DELETE
veSELECT
ifadeleri çalıştıktan sonra oluşan '_(1 row(s) affected)_' benzeri mesajları engelleyerek ağ trafiğini azaltır ve prosedür performansını arttırır.
5. Genel Geliştirme Pratikleri
INSERT
ifadelerinde her zaman kolon listesini belirtin. Bu işlem, tablo yapısı değiştiğinde (bir kolon eklemek, silmek gibi) oluşacak sorunları önler.
Last updated
Was this helpful?