Jeffrey Cross
Jeffrey Cross

Ne zaman denormalize edilmeli

Dare Obasanjo ve Jeff Atwood’un bloglarında, veri tabanı normalleşmesi konusu üzerine bir veritabanı dini savaşı yapıldı: ne zaman normale dönüleceği, ne zaman yapılmaması gerektiği ve kararın altında yatan performans ve veri bütünlüğü sorunları.

İşte argümanın kökü. Eğer tasarım gerekli performans sonuçlarını sunamıyorsa, veritabanı tasarımında hepimize öğretilenler önemsizdir.

3. normal form, DB'nizdeki ilişkilerin gerçeği yansıttığından, yinelenen verilerinizin bulunmadığından, sisteminizdeki sıfırdan çok ilişkiye kadar herhangi bir potansiyel senaryoyu barındırabileceğinden ve bu alanın boşa harcanmamış ve ayrılmamış olduğundan emin olmanıza yardımcı olur. açıkça kullanılmayan veriler. Dezavantajı, sistemdeki tek bir nesnenin birçok tabloyu kapsayabileceği ve veri kümeniz büyüdükçe, sistemden varlıkların çıkarılması için gereken birleştirme ve / veya çoklu seçimin sistemin performansını etkilemeye başlamasıdır.

Denormalize ederek, bu ilişkilerin bazılarını uzlaşıp ana tabloya geri çekebilirsiniz. Örneğin, bir kullanıcının yalnızca 3 telefon numarasına, 1 iş adresine ve 1 ev adresine sahip olmasına karar verebilirsiniz. Bunu yaparken, ortak senaryonun gerekliliklerini yerine getirdiniz ve ayrı adres veya irtibat numarası tablolarına katılma gereğini ortadan kaldırdınız. Bu nadir bir uzlaşma değil. Hareket halindeyken görmek için ortalama cep telefonunuzdaki rehber tablosuna bakın.

Jeff yazıyor:

Her iki çözümün de avantajları ve dezavantajları vardır. Öyleyse soruyu size vermeme izin verin: hangisi daha iyi - normalleştirilmiş bir veritabanı mı yoksa normalleştirilmiş bir veritabanı mı?

Tuzak soru! Cevap önemli değil! Milyonlarca ve milyonlarca veri satırınız olana kadar. Her şey küçük için hızlı.

Peki büyük n için çözüm nedir? Benim kişisel tecrübeme göre, genellikle iki yoldan da alabilirsiniz.

Veri bütünlüğünü sağlamak ve büyümeye, ek ilişkilere ve gelecekteki sorgulamanın ve indekslemenin akıl sağlığına izin vermek için veritabanınızı baştan 3NF'ye tasarlayın. Yalnızca performans sorunları olduğunu bulduğunuzda, optimizasyon hakkında düşünmeniz gerekir. Genellikle bu akıllı sorgulama yoluyla gerçekleştirilebilir.Yapamadığında, normalize edilmiş kaynaktan bir denormalize veri seti türetirsiniz. Bu, ana tablodaki ekler hakkındaki sıralama bilgilerini türeten fazladan bir alan kadar basit olabilir veya resmi kaynaktan bir miktar düzenli aralıklarla veya önemli bir durum oluştuğunda güncellenen tam gelişmiş bir nesne önbellek tablosu olabilir.

Tartışmaları okuyun ve yorumlarınızı paylaşın. Bana göre en büyük sorun, gerçek dünyadaki her soruna uyacak tek bir çözüm bulunmaması. Sonunda, son tasarımınız, çözülen sorunun benzersiz ihtiyaçlarını yansıtmalıdır.

SQL Veritabanınızı Normalleştirmek Değilken Belki Normalleştirme Normal Değildir

Hisse

Yorum Bırakmak