Veritabanı sistemleri kuruldu beri en önemli konulardan biri veri tutarlılığıdır. Transaction dediğimiz veritabanı işlemlerinin uyması gereken ACID kurallarından hep dem vurulur; bunlardan C, Consistency yani tutarlılıktır.
Peki tutarlılığa dikkat etmezsek ne olabilir?
Bunu kendi hayatımda mağduru olduğum bir örnekle anlatayım.
Neredeyse on sene önce evimi taşıdım. Ev taşımayla birlikte yapılması gereken abonelik nakli gibi pek çok işlem oldu. Bu tür işlemlerden biri de sahip olduğum kredi kartlarıyla ilgili olarak bankalarda gerekli adres değişikliklerini yapmaktı. O zaman çalışıyor olduğum bir bankaya ait iki kredi kartı için bu adres değişikliği işlemini yaptırdım ve ekstreler yeni adresime gelmeye başladı.
Buraya kadar her şey normaldi. İşler birkaç ay sonra karıştı. Bir önceki değil, iki önceki işyerimden aradılar. Kredi kartımın süresi doluyor olduğu için yenisi çıkarılmış ve iki önceki iş adresime götürülüp bir de teslim edilmişti! Büyük bir memnuniyetsizliğin ardından iki kredi kartımı da iptal ettirdim. O bankayla o zamandır bir daha çalışmadım.
Olay bu. Şimdi gelin biraz izini sürelim ve veri tutarlılığı sağlamanın niye o kadar kolay olmayabileceğini görelim.
Acaba sorun normalizasyon kurallarına uygun olmayan bir tasarım yapılması mıydı? Normalizasyon önemli bir konu, ondan konuşmayı bir başka yazıya bırakalım. Daha doğrudan bir soruyla olaya yaklaşalım: Bir müşterinin birden fazla adresi olabilir mi? Meselenin özü bu soruda. Bir bilgiyi sadece tek bir yerde tutmak ilkesine aykırı bir şey yapılmış olabilir mi?
Bir müşterinin farklı ilişkileri için farklı adresler kullanabilmesi mümkün. Mesela fatura adresi ile teslimat adresim farklı olabilir. Ama burada sadece kredi kartı sözkonusu. Düşünelim: Müşteri olarak kredi kartımın ekstresinin gönderileceği adresle yenisi basıldığında yenisinin gönderileceği adresi farklı belirtmek isteyebilir miyim? Böyle bir olasılık var. Mesela çok hovarda birisiyim belki; harcamalarımın evden görülmesini istemediğimden ekstreyi iş yerine istiyorum. Ama yeni kart gönderiminin de ev adresine yapılmasını istiyorum.
Bu durumda veritabanında kredi kartına ilişkin aynı müşterinin birden fazla adresini bulundurmak ve birini bir iş için diğerini başka bir iş için aktif olarak tutmak yanlış bir yaklaşım değil.
O zaman bir tasarım hatası yok mu? Var ama veritabanında değil. Yazılımda adres değişikliği yaptığım yerde birden fazla adresim olduğu belirtilmeli, sadece bu adresimi mi değiştirmek istediğim yoksa diğer adreslerimi de mi elden geçirmek istediğim sorulmalıydı.
Demek ki veri tutarlılığını sağlamak yalnızca veritabanında kurallara uymakla mümkün olmayabiliyor. Müşteri ile etkileşim kurulan ve veriyi oluşturan ya da değiştiren tüm süreçlerin de veri tutarlılığını düşünerek ele alınması gerekiyor.
Tabii bir de işin süreç yönü var. Diyelim diğer tüm hatalar oldu: Kredi kartını teslim etmekle sorumlu olan kişi, kartı sahibi yerine kim olduğunu bilmediği başka birilerine nasıl bırakır?
Gördüğünüz gibi veri yönetimi, sadece veritabanında olup biten bir şey değil. Verinin yaşam döngüsünün bütününün göz önünde bulundurulması ve tasarımların buna göre yapılması gerekiyor.
Etiketler:
banka
müşteri
transaction
veri tutarsızlığı
veritabanı
Mustafa Acungil
Okumak, yazmak, karmaşık konu ve ilişkileri kavrayıp kolaylaştırarak aktarmak Mustafa Acungil’in kendini en mutlu hissettiği uğraşlardır. Teknik uzmanlığının temel ekseni ‘veri’ üzerinedir. Endüstri Yüksek Mühendisliği ve Sosyolojiden sonra üçüncü üniversite olarak Tarih okumaktadır. Evli ve iki çocuk babası Acungil, ödüllü bir kurgu yazarıdır.
Yorumlar
Fatih TAŞTAN 03 Ekim 2014 - 15:10
Sevgili Mustafa, bu soruya Bosch’un efsanevi isminin güncel değillenişi kanımca en doğrusu gibi duruyor. Son yıllarda reklamlarda sıkça satılmaya çalışıldığının aksine bankalar hesap sıgalarına daha fazla önem verirler. ‘Eksi’ beğenmedikleri, ‘Kâr’ satmaya çalıştıkları terimler oluyor.
Yorum Ekle
Yorum Ekle Cevabı iptal et
Posta adresiniz, gizli kalacaktır.
İzin verilen HTML tagları, <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Bir dahaki sefere yorum yaptığımda kullanılmak üzere adımı, e-posta adresimi ve web site adresimi bu tarayıcıya kaydet.