Veri bütünlüğü: verinin doğru ve tutarlı kalması
Bir veritabanında kayıtların neden hatasız ve birbiriyle uyumlu kalması gerektiğini, bütünlük türlerini ve bunları kısıtlarla nasıl güvence altına alacağınızı öğrenirsiniz.
Bir bakışta
- Veri bütünlüğü, verinin tüm yaşam döngüsünde doğru ve tutarlı kalmasıdır. Kayıt eklenirken, güncellenirken, silinirken ve saklanırken geçerlidir.
- Üç temel tür vardır: varlık, referans ve alan bütünlüğü. Her biri farklı bir hatayı önler.
- Bütünlüğün en güvenilir yeri veritabanının kendisidir. Kısıtlar, uygulama kodundaki hatalardan ve atlanan kontrollerden bağımsız çalışır.
- Bütünlük, güvenlik ve veri kalitesiyle aynı şey değildir. Güvenlik erişimi, kalite ise değerin gerçeği yansıtmasını ifade eder.
- Bozulan bütünlük raporlara ve kararlara sessizce yansır. Yinelenen müşteri ya da sahipsiz sipariş, analizleri yanıltır.
Veri bütünlüğü nedir?
Veri bütünlüğü (data integrity), verinin doğruluğunu, tutarlılığını ve güvenilirliğini yaşam döngüsü boyunca korumaktır. Bir veritabanında bu, kayıtların hatasız girilmesi, birbiriyle çelişmemesi ve izinsiz ya da hatalı değişikliğe uğramaması anlamına gelir.
Bütünlük, verinin kendisiyle ilgilidir; verinin gerçek dünyayı ne kadar yansıttığı ise veri kalitesinin konusudur. Kayıt biçim olarak geçerli ve tutarlı olabilir ama gerçekle örtüşmüyor olabilir; bu durumda bütünlük sağlanmış, kalite sağlanmamıştır.
Üç temel bütünlük türü
İlişkisel veritabanı kuramında bütünlük genellikle üç başlıkta ele alınır. Her biri farklı bir hata sınıfını engeller ve farklı bir kısıtla sağlanır.
- Varlık bütünlüğü: her satırın tekil ve boş olmayan bir kimliği olur
- Referans bütünlüğü: bir tablodaki bağlantı, var olan bir kayda işaret eder
- Alan bütünlüğü: sütundaki değer, izin verilen tür, biçim ve aralığa uyar
Bazı kaynaklar buna kullanıcı tanımlı iş kurallarını da ekler; örneğin bir siparişin tutarı iş kuralına göre belirli bir koşulu sağlamalıdır.
Her bütünlük türü, farklı bir hatayı önler
Üç tür ve karşılıkları
| Neyi korur | Nasıl sağlanır | |
|---|---|---|
| Varlık bütünlüğü | Satırların tekil ve tanımlı olmasını | Birincil anahtar, benzersizlik, boş olamaz |
| Referans bütünlüğü | Tablolar arası bağın geçerli kalmasını | Yabancı anahtar ve silme kuralları |
| Alan bütünlüğü | Sütundaki değerin geçerliliğini | Veri türü, varsayılan değer, kontrol kısıtı |
Kısıtlarla nasıl sağlanır?
Bütünlük kuralları uygulama koduna değil, mümkünse tablonun kendisine yazılır. Böylece aynı tabloya farklı uygulamalardan, betiklerden ya da elle veri girilse de kural aynen işler. Küçük bir örnek:
CREATE TABLE musteri ( id INT PRIMARY KEY, eposta TEXT NOT NULL UNIQUE );
CREATE TABLE siparis ( id INT PRIMARY KEY, musteri_id INT NOT NULL REFERENCES musteri(id), durum TEXT CHECK (durum IN ('acik', 'kapali')) );
Burada PRIMARY KEY ve UNIQUE varlık bütünlüğünü, REFERENCES (yabancı anahtar) referans bütünlüğünü, NOT NULL ve CHECK ise alan bütünlüğünü korur. Var olmayan bir müşteriye sipariş yazmak ya da geçersiz bir durum girmek veritabanı tarafından reddedilir.
Küçük bir örnek: yetim sipariş
Bir şirkette müşteri kaydı silindiğinde onun siparişleri kalırsa, raporlarda sahibi olmayan satışlar görünür. Yabancı anahtar kısıtı varsa silme ya reddedilir ya da kurala göre siparişlere de uygulanır (zincirleme silme) ya da bağ boşaltılır.
Hangisinin doğru olduğu iş kuralıdır: finansal kayıtlarda silmek yerine müşteriyi pasif işaretlemek genelde daha güvenlidir. Bütünlük kısıtı, bu kararı unutulmuş bir ayrıntı olmaktan çıkarıp açık bir tasarım tercihine çevirir.
Bütünlük neden bozulur?
- Kısıtsız tablolar: kurallar yalnız uygulama kodunda tutulur ve atlanabilir
- Eşzamanlı yazma: birden çok işlem aynı kaydı değiştirirken işlem yönetimi yoksa kayıp güncelleme olur
- Toplu aktarım: dışarıdan yüklenen verinin tür ve ilişki kontrolleri yapılmaz
- Elle düzeltme: doğrudan veritabanında yapılan değişiklikler kuralları atlar
- Donanım ve yazılım hatası: bozuk yazma ya da yedek geri yükleme hataları veriyi tutarsız bırakır
Bu nedenle bütünlük kısıtlarına ek olarak işlemler (transaction), yedekleme ve erişim denetimi birlikte düşünülür; işlem tarafındaki güvenceler ACID özellikleri kavramında ele alınır.
Mindset programlarında nerede çalışılır
Veritabanı Yönetim Sistemleri ve Uygulamaları programı, ilişkisel veritabanlarını, veri modelleme ve tasarımı ve veritabanı yönetimini kapsar; bütünlük kuralları veritabanı yöneticisi ve geliştirici için tasarım aşamasının parçasıdır.
SQL ile Programlama Eğitimi tablolarla çalışmayı ve veri işleme dilini işler; kısıt yazımı ve hatalı veri girişinin sonuçları bu uygulamalı çerçevede görülür.
İlgili Mindset programı
Veritabanı Yönetim Sistemleri ve Uygulamaları
Sık sorulan sorular
Veri bütünlüğü ile veri güvenliği aynı mıdır?
Hayır. Güvenlik, veriye kimin eriştiğini ve neyi değiştirebildiğini denetler. Bütünlük ise verinin kendi içinde tutarlı ve geçerli kalmasını ifade eder. İkisi birbirini tamamlar; yetkisiz kişi veriyi bozarsa güvenlik, yetkili kişi hatalı veri girerse bütünlük kısıtları devreye girer.
Referans bütünlüğü ihlal edilirse ne olur?
Veritabanı kısıt tanımlıysa işlemi reddeder ve hata verir. Kısıt yoksa yetim kayıtlar oluşur; raporlar eksik ya da yanlış sonuç verir, birleştirme (join) sorguları satır kaybeder.
Bütünlük kontrollerini uygulama kodunda yapmak yeterli mi?
Tek başına yeterli değildir. Uygulama kontrolü kullanıcıya hızlı geri bildirim verir, ama veritabanına başka yollardan da yazılabilir. Kritik kurallar veritabanı kısıtı olarak da tanımlanmalıdır.
Normalizasyon bütünlükle nasıl ilişkilidir?
Normalizasyon aynı bilginin birden çok yerde tekrarını azaltır; böylece bir bilgi güncellenirken diğer kopyaların eski kalması riski düşer. Yabancı anahtarlar ise normalleştirilmiş tabloların tutarlı biçimde bağlı kalmasını sağlar.
NoSQL veritabanlarında veri bütünlüğü nasıl olur?
Birçok NoSQL sistemi şema ve ilişki kısıtlarını zorlamaz ya da gevşek zorlar. Bütünlük çoğunlukla uygulama kodu, doğrulama kuralları ve veri modeli tasarımıyla sağlanır; bu yüzden tasarım disiplini ilişkisel sistemlerden daha çok önem kazanır.