Modelleme ve veri değişimi
Normalizasyon ve güncelleme anomalileri
Tek doğru bilgi kaynağı tasarla.
Kavramı anlayalım
Normalizasyon gereksiz tekrarları ve ekleme, silme, güncelleme anomalilerini azaltmayı hedefler. 1NF’de alanları sorgulanabilir tek değerler olarak düşün; virgülle birleştirilmiş ürün listesi yerine kalem tablosu kullan. 2NF’de anahtar dışı alanların birleşik anahtarın yalnız bir bölümüne bağlı olmasını engelle. 3NF’de anahtar dışı alanlar üzerinden gereksiz dolaylı bağımlılıkları ayır.
OrderItem.UnitPrice tarihsel bir satış gerçeğidir; güncel Product.Price ile aynı şeyi tekrarlamaz. Dolayısıyla her benzer alan normalizasyon ihlali değildir. Denormalizasyon rapor hızlandırmak için seçilebilir, fakat doğruluk kaynağı, yenileme ve tutarsızlık riski açık olmalıdır.
İşlem tabloları tasarlanırken tekrarlı müşteri ve ürün bilgilerini ayırmak için.
Tarihsel satış fiyatını güncel ürün fiyatıyla değiştirerek geçmişi bozmak.
Aynı konu. Üç farklı derinlik.
SELECT CustomerId, FullName, Email FROM lab.Customer;Müşteri bilgileri siparişlerden ayrı saklanır.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
Sipariş 109 için tarihsel kalem tutarı ile güncel fiyat kullanılarak hesaplanan tutarı karşılaştır.
Çözümü ve açıklamasını göster
SELECT SUM(i.Quantity * i.UnitPrice) AS Historical, SUM(i.Quantity * p.Price) AS CurrentPriceBased FROM lab.OrderItem AS i JOIN lab.Product AS p ON p.ProductId = i.ProductId WHERE i.OrderId = 109;37500 ve 39000 farklıdır; gerçek satış tutarı 37500’dür.