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.