Normalleşmeye ne kadar devam etmelisiniz?


30

Veritabanında uygun miktarda veri var. Verilerimde iyi biçimlendirilmiş tablolar ve bunlar arasında bir miktar fazlalık olan iyi ilişkiler var. Ama normalizasyon ile ne kadar ileri gitmeliyim? Çok fazla normalleşmenin performans sakıncaları var mı?

Yanıtlar:


37

İstediğin kadar gitmelisin, daha fazla değil. Tabii ki. Sorun, bunun bir sanat eseri olması ve bunun saf bir bilim olmadığı için olabilir.

Ana ürünümüz bir analiz ve raporlama sistemidir ve bu konuda oldukça az ayrıntı kaydettik. Başlangıçta, bazı çocuk kayıtları için ortak bir kimlik numarası ile birçok ortak birleşim tasarladık, ancak birkaç alanı denormalize edersek, bir LOT katılımı kesebileceğimizi ve birçok performans baş ağrısını kaldırabileceğimizi bulduk.

Ancak biliyoruz ki biz 1) biz "normalize" bir tasarım yarattık, 2) onu kullanmaya başladık, 3) onlarca masadaki yüz milyonlarca satırın ardından gerçek performansı belirledi.

Son hikaye, profil yapana kadar bizim için neyin işe yarayacağını kesin olarak bilemeyeceğimizdir. Normalleştirme fikrini sevdik, böylece daha kolay güncellenebildik, ama sonunda gerçek performans belirleyici faktördü. Bu sana tavsiyem: Profil, profil, profil.


4
sanat ve bilim değil, bana vudu olduğuna inanmamı sağlıyor. Referans var mı?
abel

3
@Abel genel olarak fıkralarım nasıl? Bir profiler, normalleştirme için kurallar önerebilir, ancak bu kurallar bir programcıdan deneyime dayanır. Tüm programlama bir sanattır. Daha sonra tam bir klavyeye girdiğimde aynı şeyi söyleyen daha ünlü birini bulacağım.
jcolebrand

1
@ Abel oh iyi o zaman hepsi in ('forgiven','pardoned');;): p
jcolebrand

2
@Fergus beğendiğinize sevindim. Her zaman fıkraları en iyi şekilde çalıştım.
jcolebrand

2
@abel - 'Bir sanat 7'den fazla serbestlik derecesine sahip bir bilimdir'. Belli bir karmaşıklık seviyesinin ötesinde bir soruna ayrıntılı yaklaşımlar olanaksız hale gelir. Bu noktada tecrübeye dayalı sezgisel yaklaşımlar en etkilidir. Ne yazık ki, bilgisayar alanında bu karmaşıklık seviyesinin önemsiz yazılım sistemleri dışında her şeyde elde edilmesi oldukça kolaydır.
ConcOedOfTunbridgeWells

10

Normalleştirme, yalnızca veri modelinizi garanti edecek kadar iyi desteklediğinde bir hedeftir. Büyüme, yönetim ve sürdürülebilirliğe olanak sağlamak için bir rehber olması amaçlanmıştır. Normalleştirme konulu kitabın veya yazanın veritabanınızı veya uygulamanızı oluşturamayacağını veya sürdürmeyeceğini unutmayın.

"Çok fazla normalleşme" konusunda iyi bir okuma burada.

Ve evet, çok fazla normalleşmenin performansa etkisi olabilir. Bu durum, durum gösterge tabloları gibi şeyleri ayrı bir masaya çekildiklerinde toplamak için daha derin bir tablada olacaktır. Bazıları bunun genellikle güncelleme hızında (durum metninin "İyi" den "İYİ" veya benzeri bir şeyle değiştirilmesi) veya bakımın yapılmaması olduğunu söyleyecektir.


2
İşte konuyla ilgili ek bir okuma ve çok daha eğlenceli qntm.org/gay
jcolebrand

5

Chris Date'nin daha yeni kitaplarından birkaçında bulunan aşağıdaki ekleri okumanızı öneririm :

Normalizasyon İçin İki Şerefe

Normalleşme her derde deva olmaktan çok uzaktır, çünkü amaçlarının ne olduğunu ve onlara karşı ne kadar iyi ölçtüğünü göz önünde bulundurarak kolayca görebiliriz ...

Bu bölümdeki yorumlarımın herhangi bir saldırı olarak görülmesini istemediğimi açıkça belirtmeliyim. Tamamen normalleştirilmiş bir tasarımdan daha azının kesinlikle kontrendike olduğuna inanıyorum.


2

Açıkça eklenmiş denormalizasyonlara, eklenen toplam değerlere veya bir detay tablosuna kopyalanmış bir ana tablodaki bazı alanlara bakmanın eşit derecede önemli olduğunu düşünüyorum.

Argüman çoğunlukla bazı performans argümanlarıdır.

Bunu zorlarsanız, bu alanlar tetikleyiciler tarafından güncellenir ve tutarlı olmaları için veritabanına bağlıdır.


2

Ben jcolebrand ile tamamen katılıyorum. Uygulamanız için model tasarlarken, yapabileceğiniz her şeyi normalleştirmelisiniz. Ancak, özellikle sık yapılanlar, modeliniz üzerine inşa edilmiş sorguları profillemelisiniz.

Kendi tecrübelerim: ulaşmak için iki birleşme alan özellikler (üç masa bir araya geldi demektir) çoğunlukla bir performans domuzu olacaktır. Ve işleri en kötü hale getirmek için on-line işlemlerde kullanılır. Özelliği denormalize ediyorum, bu yüzden sadece bir üyeye ihtiyacım var ve programlayıcıdan sorgu için uygulamalarını ayarlayıp niteliği güncellemesini istedi. Şimdi daha iyi çalışıyor ...

Başka bir deyişle, normalleştirmeyi performansla dengelemeniz gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.