SORU
23 ŞUBAT 2010, Salı


İlk kez veritabanı tasarımı: overengineering mıyım?

Arka plan

İlk yıl CS bir öğrenci ve ben babamın küçük iş için çalışmaya başladım. Gerçek dünyada Uygulama Geliştirme herhangi bir deneyimi yok. Python, C Bazı dersler, ama böyle bir şey içinde komut yazdım.

Babam küçük bir eğitim, iş ve planlanan tüm sınıflar şu anda, kaydedilen ve harici web uygulaması aracılığıyla takip. Orada bir verme/"raporlar" ama çok genel ve özel raporları ihtiyacımız bulunmaktadır. Sorguları çalıştırmak için gerçek veritabanına erişimi yok. Özel bir raporlama sistemi kurmak istendi.

Benim fikrim genel CSV ihracat oluşturmak ve (muhtemelen Python ile) veritabanı gerekli olan belirli sorguları çalıştırabilirsiniz nereden ofiste her gece, o bir MySQL içine almak. Veritabanlarında deneyim var ama çok temel anlamıyorum. Veritabanı oluşturma ve normal formları hakkında bir şeyler okudum.

Yakında uluslararası müşterileri olan başlasak da, veritabanı olur/yoksa patlamak istiyorum. Biz de şu anda müşterilerine, farklı bölümler gibi birkaç büyük şirketin (örneğin ana şirket ACME, ACME sağlık bölümü, ACME bodycare bölümü)

Buldum şema şudur:

  1. Müşteri perspektifi:
    • Müşteriler Ana Tablo
    • Müşteriler için çalışma Bakanlığı'na bağlı
      • Bir ülke çapında dağılmış bölümleri: London HR, Swansea Pazarlama, vb.
      • Bölümler bir şirket bölünmesi ile bağlantılıdır
    • Bölümler ana şirket bağlı
  2. Sınıflar açısından:
    • Oturumların Ana Tablo.
      • Bir öğretmen her seans bağlıdır
      • Bir statusid her oturum için verilir. E. g. 0 - Tamamlandı, 1 - İptal Edildi
      • Oturumlar "paketleri" rasgele bir boyutta . gruplandırılır
    • Her paket müşteri için atanır

Ben "" bir kağıda (daha fazla gibi karalanmış) şema, 3 şeklinde. bunu normalize tutmaya çalışıyorum tasarlanmış Ben o zaman MySQL Tezgah içine takılı ve her şey oldukça benim için yaptı:
(Click here for full-sized graphic)

alt text

Örnek bir çalışan olacağım sorgular

  • Hala sol inaktif (sınıfı olmayanlar gelecekte planlanan)
  • İstemci/bölüm/bölünme (her oturumda durum ıd ile ölçülen) başına katılım oranı nedir
  • Kaç tane sınıf öğretmeni bir ay oldu
  • Düşük katılım oranına sahip olan bayrak müşteriler
  • Özel bölümü içinde insanların katılım oranları ile insan kaynakları departmanı için rapor

Soru(s)

  • Bu overengineered ya da doğru yolda mıyım?
  • Sorguların çoğu için birden fazla tabloları birleştirmek için gereken büyük bir performans isabet neden olur?
  • Bir 'lastsession muhtemelen ortak bir sorgu olacak gibi. müşterilerinin sütun ekledim Bu iyi bir fikir ya da veritabanını tamamen değiştirilmiş devam edeyim mi?

Zaman ayırdığınız için teşekkürler

CEVAP
23 ŞUBAT 2010, Salı


Bazı sorularınıza cevaplar:

1) hemen hemen ilk defa böyle bir sorun yaklaşan birisi için hedef alındın. Bu soru üzerinde diğerlerinden işaretçileri şimdiye kadar oldukça iyi bir kapak bence. İyi iş!

2 & 3) alacak vurmak büyük ölçüde ve belirli bir sorgu için doğru dizinler sahip optimize bağımlı olacaktır performans ve daha da önemlisi kayıt birimi / prosedürler. Yeterince yaygın bir tasarım olması için yolda gibi görünüyor ana tabloları üzerinde bir milyon albüm bahsediyoruz sürece bu performans makul donanımda bir sorun olmayacaktır.

O dedi, Bu senin sorunun muhtemelen gerçekten performansı hakkında aşırı endişeli olması gerekmez başlaması ile birlikte 3 ya da hiper-duyarlılık Ortodoks burada normalleşmesi ile ilgilidir. Bu bina, bir işlem performansı veya normalleştirme önemi açısından çok farklı bir profile sahip olan uygulama, arka uç, tabanlı raporlama sunucusudur. Bir veritabanı bir canlı kayıt ve zamanlama uygulama desteği saniye veri dönüş sorguları dikkatli olmalı. Sadece server fonksiyonu karmaşık ve uzun sorgular için daha fazla hoşgörü var, ama performansı artırmak için stratejileri çok farklı bir rapor yok.

Bir işlem uygulama ortamı göre örneğin, performans geliştirme seçenekleri son derece saklı prosedür ve tablo yapıları yeniden düzenleme, ya da sık istenen küçük miktarlarda veri için bir önbellek strateji geliştirme içerebilir. Bir raporlama ortam kesinlikle bu ama bir daha darbe performansı ile tanıtan bir anlık mekanizması nerede zamanlanmış bir işlemi çalıştırır ve depolar önceden yapılandırılmış raporları ve kullanıcıların erişim anlık verilerle stres yok senin db katta bir başına talep olarak.

Tüm bu tasarım ilkeleri ve hileler istihdam neler yaratıyorsun db rolü verilen farklı olabileceğini göstermek için uzun soluklu bir rant. Faydalı olur umarım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • Hak5DarrensVlog

    Hak5DarrensV

    11 EYLÜL 2009
  • o0oCyrusViruso0o

    o0oCyrusViru

    11 Mart 2008