COMPUTER ENGINEER

Örneklere git
Blog
SQL Server / T-SQL6 dk çalışma
33/ 65

Modelleme ve veri değişimi

Normalizasyon ve güncelleme anomalileri

Tek doğru bilgi kaynağı tasarla.

AnlaÖrneği inceleKendin uygula

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.

NERESİNDE KULLANIRSIN?

İşlem tabloları tasarlanırken tekrarlı müşteri ve ürün bilgilerini ayırmak için.

SIK YAPILAN HATA

Tarihsel satış fiyatını güncel ürün fiyatıyla değiştirerek geçmişi bozmak.

01 / UYGULAMA

Aynı konu. Üç farklı derinlik.

T-SQL / SQL Server 2019+
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.

02 / SIRA SENDE

Ö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
Açıklamalı çözüm
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.