2011-09-23 11 views
6

Bir projeye başlıyorum ve Django kullanmaya karar verdim.Django: Veritabanı tasarımı için en iyi uygulamalar

Sorumu veritabanının oluşturulmasıyla ilgilidir. Eğiticiyi ve bazı kitapları okudum ve bunlar her zaman modelleri oluşturmaya başlıyor ve ardından DataBase'i senkronize ediyor. Söylemeliyim, bu benim için biraz tuhaf. Ben her zaman DB ile, şemayı tanımlayarak başladım ve bundan sonra DB Soyutlamalarını (modeller, varlıklar, vb.) Oluşturdum.

Bazı harici takılabilir uygulamaları inceledim ve bunlar "önce model" uygulamalarını da kullanıyorum.

"model-ilk" yaklaşımı için bazı avantajlar görebilirsiniz vb taşınabilirlik, yeniden dağıtım,

Ama aynı zamanda bazı dezavantajları gördüğüm gibi: endeksleri nasıl oluşturulacağı, dizinin tür tetikler, görünüşler, SP'ler, vb.

Peki, gerçek bir yaşam projesine nasıl başlıyorsunuz?

+1

benim db şema planı, daha sonra bir django modeli aracılığıyla uygulamak Kullanmak için diğer sql komutları vardır. Django'da veya db arka ucunuzda dizin oluşturabilirsiniz. – dm03514

+0

+1 İyi "mixin". – santiagobasulto

cevap

11

Tetikleyiciler, görünümler ve saklı yordamlar Django dünyasının gerçekten bir parçası değildir. Bunları kullanmak için yapılabilir, ama bu acı verici ve gereksizdir. Django'nun geliştiricileri, iş mantığının veritabanında değil, Python'a ait olduğunu düşünüyor.

endeksler gelince, db_index ve unique_together gibi şeylerle (modellerinizden onları birlikte oluşturabilir veya Güney gibi bir şey kullanarak veritabanı göçler yoluyla daha sonra ekleyebilirsiniz.

+0

+1 iyi cevap. Teşekkürler. Şimdi soruyorum: Hiç tetikleyiciler, SP'ler veya görüşler kullanmıyor musunuz? Gerçek dünya uygulamaları bu şeyler olmadan var olabilir mi? Lütfen beni yanlış anlama, Python + Django dünyasında yeniyim. Büyük Mimarlar Java Uygulamalarından geliyorum ve bu DB'ye güveniyoruz. Güney'in kullanımı için – santiagobasulto

+1

+1. Gönderinizi ve benzerlerini geçişleri kullanarak yönetebilir ve hayatı daha kolay hale getirebilirsiniz. –

+0

Oracle geliştiricileri, veritabanı tasarımının tartışılmaz bir ilkesinin birincil anahtarların değişmez olması gerektiğinde ısrar ediyorlar. Bu iddia için gerçekten iyi bir teorik sebepleri yok. Sadece Oracle'ın “GÜNCELLEME CASCADE'I” desteklemiyor olması. Django'nun tetikleyicileri, görüşleri, saklı yordamları, kısıtlamaları ve ertelenmiş kısıtlamaları baştan beri desteklemesi durumunda fikrinizin farklı olacağını düşünüyorum. –

7

Çoğunlukla (SQL yazmayın Örneğimiz için indeks oluşturabilir, tablo oluşturabilir, vb ...) ve bizim için onu üretmek için Django'ya güvenin

Güvenebileceğiniz gibi, uygulamanızı model katmanından tasarlamaya başlamak kesinlikle sorun değil Django üzerinde sizin için doğru veritabanı sql oluşturmak için.

  • tetikler: Django code or MySQL triggers
  • endeksler: Bu veritabanı fonksiyonları çoğaltmak için şimdiye Django çeşitli işlevleri sağlamak yapar unique = True veya unique_togther = (('field1', field2'),) kompozit benzersiz kısıtlama için: db_index=True
  • benzersiz kısıtlamaları ile belirtilebilir.

SQL yazmak yerine Django kullanmanın avantajı, kendinizi kullandığınız veritabanından soyutlamanızdır. Diğer bir deyişle, bir gün SQLite üzerinde olabilir ve bir sonraki PostgresQL veya MySQL'a geçebilir ve değişiklik nispeten ağrısız olacaktır.

Örnek:

python manage.py syncdb 

Django otomatik, tablolar, dizin oluşturur tetikler, vs, bu oluşturduğunuz modellerini desteklemesi gerekir:

bu çalıştırmak.Eğer Django sizin için veritabanı oluşturma ile rahat değilseniz, her zaman kullanabilirsiniz: Bu SQL ifadeleri çıktısını olacak

python manage.py sqlall 

onun modeller düzgün çalışması için Django sırayla olması gerekir söyledi.

bkz: https://docs.djangoproject.com/en/1.3/ref/django-admin/#sql-appname-appname

+0

Bence bu doğru. Ancak, her zaman veritabanlarını değiştirmek için yaygın olmadığını söylüyorum. Demek istediğim, herkes bunu büyük bir avantaj gibi görüyor, ama nadiren oluyor. İyi cevaplar BTW +1 – santiagobasulto

+0

Değeri için (ve bu iş parçacığı 2+ yaşından beri) Son zamanlarda SQLite olarak başlattığım iki projeyi değiştirdim (böylece onları daha düşük bir sistemde çalıştırabilirim. Postgres'i performans/çoklu işlem nedenlerinden dolayı kullanmak. – Foon