28 Temmuz 2016 Perşembe

Tablo tasarım aşamasında kötü uygulamalardan biri...

Selam millet,

Bugün çalıştığım ortamlardan birindeki geliştirme ortamından canlı ortama taşıma yapıyorduk ve tablolardan birinde çok kötü bir uygulama yapıldığını gördüm. Tablo Schema'sı şöyle bir şeydi:

CREATE TABLE xxx.tbl_xxx(
...
Log_Id INT,
Log_Explanation NVARCHAR(500)
...)

Bu bir başka tablodaki kayıtlarla ilgili yapılan işlemler için tutulan kayıt (log) tablosu.

Log_Id alanı, yapılan işlemin ne olduğunu belirten eşsiz bir işlem kayıt numarası, misal 10, 15, 17...

Log_Explanation alanı ise yapılan işlemin ne olduğunu açıklayan alan, misal "Giriş yapıldı", "Çıkış yapıldı", "Yeni kayıt"...

Yani tablodaki örnek bir kayıt şöyle görünüyor:

alan1 | alan2 | Log_ID | Log_Explanation
... | ... | 10 | "Giriş yapıldı"
... | ... | 10 | "Giriş yapıldı"
... | ... | 10 | "Giriş yapıldı"
... | ... | 15 | "Çıkış yapıldı"
... | ... | 15 | "Çıkış yapıldı"
... | ... | 17 | "Yeni kayıt"
... | ... | 17 | "Yeni kayıt"
... | ... | 17 | "Yeni kayıt"

Hiç uzatmadan doğrudan söylenecek şeyi söyleyeyim, böyle bir tablo oluşturan arkadaşımın veritabanı tablo tasarımından bihaber olduğu, hatta genel mantıktan bile uzak olduğu aşikar. Evet, biraz sert, ama üzgünüm gerçek bu.

Arkadaşlar böyle tasarım yapılmaz. Böyle bir şeyi ancak veritabanı sistmeleriyle tanışalı 1 gün olmuş biri, hiçbir şey okumadan, oynaya oynaya öğrenmeye çalışırken yapar.

Böyle senaryolar için tablo tasarımı yapılırken açıklamalar her zaman başka bir tabloda tutulur, kayıtlar bu şekilde çoklanmaz. Çoklanacak, yani kendini tekrar edecek tek bilgi açıklamanın ID'si olabilir, daha sonra da gerektiğinde, bir arayüzde gösterim yapılırken mesajların saklandığı diğer tablodaki kayıt açıklamasının ID'si ile kayıt tablosundaki ID birleştirilir ve öyle gösterilir.

Bunlar çok çok temel şeylerdir, lütfen ama lütfen bir tablo tasarlama işine girişmeden önce ya bu konuda bir eğitim alın ya da bütçeniz yoksa açın bir kitap okuyun.

Ekrem Önsoy


Hiç yorum yok: