2 Ağustos 2020 Pazar

Database Tasarlarken Tablo İsimlendirme Nasıl Olmalı ?

Merhabalar,
 
Uzun yıllar kod yaza yaza birçok metot deneye deneye sonunda artık karar kıldığım bir veritabanı tablo isimlendirme yapısına kavuştum. Bu yapıyı uzun zamandır kullanıyorum ve gerçekten veri tabanı tarafından işlerimi kolaylaştıran yönleri olduğunu görüyorum. Bu deneyimimi sizlerle paylaşmak istedim arkadaşlar.
 
 
Veri tabanında isimlendirme konusu sandığınızdan çok daha önemli bir konudur. Programlama sırasında size kolaylık sağlaması dışında büyük ekiplerin ortak bir projede çalışırken de adaptasyonu kolay olmalı ve isimlendirmeler manalı olmalıdır.
 
 
Metotları açıklamak için örnek Müşteri, Müşteri Türü, Sipariş Türleri ve Siparişler şeklinde 4 tabloya ihtiyaç olduğunu düşünelim. 
 
En temel konu öncelikle tablonun isimlendirmesi olacaktır. Bu tablolara ne isimler verirdiniz ?
 
Veritabanı Tablo İsimlendirmesi 
 
Yaygın kullanılan yöntem 
Customers
CustomerTypes
OrderTypes
Orders 
 
şeklindedir. Özellikle MS-SQL geliştirme yapan coğu kişi entity framework ve progralama ortamında alışkın olduğu isimlendirme gereği bunu kullanır. Elbette kullanılabilir, ancak benim bu isimlendirmede gördüğüm birkaç sıkıntı var.
 
Öncelikle bu şekilde isimlendirdiğinizde, bunun entity framework tarafında daha alışılmış durduğunu kabul ediyorum. Ancak buna rağmen kodlama ortamında eğer büyük bir proje geliştiriyorsanız kullandığınız ara yardımcı modeller çok fazla olmaktadır. Örneğin OrderManager gibi veya AccountManager gibi şeyler yazıp bunları kullanıyoruz. 
 
Kodlama büyüdükçe o kodların arasında zaten business işlerimizin yürüdüğü modeller ile veritabanı modelleri birbiri ile aynı olduğu zaman çok ciddi benzerlik olması bana kalırsa bir sorun. Bunun yerine rahatça bir nesnenin DB objesi olduğunu anlamak büyük bir avantajdır. İşte bu nedenle ben öncelikle isimlendirmede tamamen büyük harf kullanmanın daha pratik olduğuna karar vermiş durumdayım.
 
1- Tekil İsimlendirme
 
Mantık olarak baktığınızda birçok müşteri verisini tutan tablonun isminin CUSTOMERS tablosu olması daha anlamlı aslında. Evet bu aslında gerçekten de daha mantıklı ama sorunlara sebep olduğu için iyi bir yol değil. 
 
Nasıl bir sorun derseniz, FISH tablosunu örneğin FISHES gibi her tabloda ingilizce kuralına göre çoğulunu türetmek biraz zorlayıcı. Bunda ne zorluk var demeyiniz, öyle uzun ve karmaşık sorgular yazarken buna odaklı olmadığınız için FISHES yazmak yerine FISHS şeklinde hatalı tahminleme ile kodlama yapabiliyoruz. Niçin bu zorluğa girelim ki, doğrudan tekil isim kullanma kuralı uygulanırsa bu sorun tamamen ortadan kalkıyor.
 
2- İngilizce İsimlendirme
 
Öncelikle pratik olsa idi Türkçe isimlendirme yapmanızı çok isterdim. Bu konuda epey gayret göstermiş birisi olarak yakın zamanda Türkçe isimlendirme ile devam ettiğim bir projemde de yaşadığım sıkıntılar sonucu İngilizce isimlendirmeye geçiş yaptım.
 
En büyük sorun tabi ki Türkçe karakter sorunu yaşamak oluyor. Dahası yazılım projeleri bugün belki büyük bir projeniz olmasa bile ilerisini kim bilebilir ki. Ekibiniz büyüdüğünde yabancı birçok yazılımcı ortak dili ingilizcedir Dolayısı ile ingilizce olması konusunda artık en küçük bir tereddütüm bile kalmamıştır size de tavsiyem budur.

3- Tamamen Büyük Harf ve '_' ile kelimeleri ayırın
 
CUSTOMER, CUSTOMERTYPE, ORDERTYPE ve ORDER şeklinde isimlendirmek kesinlikle daha kullanışlı. Bu aslında hak ettiği değeri vermesi adına da güzel bir kullanım. En iyi programı yazabilirsiniz ama veriyi iyi yönetmezseniz o yazılım doğru sonuçlar üretemez.

Yani tamamı büyük harf olması hem diğer nesnelerden öğeyi ayırdığı gibi ne denli önemli olduğu hakkında da bir güç kazandırıyor. 
 
Ama şimdi de bilmem fark ettiğiniz mi büyük küçük harf ayrımı olmadığı için otomatik olarak 2 kelimeden oluşan tabloların kelimelerini ayırmak zorlaştı! 
 
İşte bu sorunu da gidermek için kelimeler arasına '_' ekliyoruz. Yani nihai nokta şu şekilde oluyor.
 
CUSTOMER
CUSTOMER_TYPE
ORDER_TYPE
ORDER  
 
Bakın ne kadar anlaşılır ve anlamlı hale geldi. Bu yazım şekli aslında özellikle Oracle üzerinde çalıştığımda gelişti aslına bakarsanız. Kesinlikle çok daha kullanışlı.
 
 
4- Kelimelerin yalın halini kullanın
 
Veri tabanlarında birçok kayıt ile ilgili ilişkili başka kayıtlar tutulmaktadır. Bunlardan örneğin müşteri sisteme erişimlerini log tuttuğunuz bir tablo isimlendirecek olalım. Ne yapardınız ? 
 
CUSTOMERS_ENTERANCE_LOGS, CUSTOMER_ACCESS_LOGS, CUSTOMER_ACCESSES v.s...
 
Bir sürü seçenek doğuyor aklınızda. Bu metot risklidir çünkü, sürekli benzer bir kurallandırma koyup isimlendirme yapamazsınız.
 
Yani bir isim tamlaması kuralı belirleyip hepsine aynı şekilde uygulama şansınız olmayacağı için belirsizlik nedenidir.
 
Bakış açısı şu olmalıdır. Bu tabloda kayıt edilecek şey nedir sorusuna verilen en yalın isimler tablo adı olmalıdır.
 
Bu örnekte mesela, 'Müşteri Sistem Erişimleri' yani müşteri sisteme her login olduğunda sistem bir kayıt atacak ve bu sayede aslında sistemin güvenliğini sağlamak için bir tablodur bu.
 
Bu tablonun adı 'CUSTOMER_ACCESS' olması yeterlidir aslında. Bu isimlendirme herşeyi anlatır ancak hala bir sorun vardır.
 
 
 
5- Modül ön ekini kullanın
 
Bir önceki önerimde belirlediğimiz tabloyu düşünelim. Bu 'CUSTOMER_ACCESS' tablosunun ana amacı nedir ? 
 
Tabi ki güvenlik amacı ile müşterinin kayıtlarının tutulmasıdır. Böylece bir müşteri yerine başkaları giriş yapmış olma durumu takip edebilmesi sağlanır. Yani ana amacı güvenliktir ve görev yaptığı modül güvenlik ile ilgilidir. 
 
İşte bu örnekte mesela  'SECURITY_CUSTOMER_ACCESS' isimlendirmesini kullanmak daha akıllıca olacaktır.
 
Tabloları incelerken veritabanı üzerinde çok daha anlamlı şekilde isimlerine göre modüler bazla sıralandığını görebilirsiniz.
 
Bir diğer faydası da kodlarken örneğin dbo.SECUR... gibi bir yazım sonrası size programın önerdiği listede bu modüldeki tüm tabloları sunabilme gücüdür. 
 
 
 
Tablo isimlendirmesi konusunda önerilerim bu şekildedir arkasdaşlar.

Bir sonraki yazımda kolon isimlendirmeleri konusu ile karşınızda olana dek kendinize iyi bakın.

Yorum Bırak