En İyi Uygulamalar: Veritabanı uygulaması programlama kalıpları


11

Şimdiye kadar birçok veritabanı (MySQL) web uygulaması yazdım ama her zaman yapımın biraz sakar olduğunu düşünüyorum. Burada tavsiyelerde bulunmayı umarak kullandığım programlama / tasarım modelini geliştirmek istiyorum. Özellikle, veritabanının (şema) uygulanmasını kapsayan OOP yaklaşımını tamamlayan bir yapı bulamıyorum. ben

Sorumun en iyi örnekle açıklanabileceğini düşünüyorum. Şimdi kullandığım 2 Fatura nesnesi / sınıfı olduğunu söyleyen 2 yaklaşım var:

birincisi statik üye işlevlerini kullanmaktır

class Invoice
{
   int id;
   string ref;
   int customer_id;
   date created;
   date due;

   static id create();
   static bool update(id, field1, field2, ...);
   static bool delete(id);
   static bool get(id);
};

İkinci yaklaşım, her şeyi bir veritabanı nesnesine koymaktır:

class Database extends ProprietaryDBConnecter, Singleton
{
   id createInvoice();
   bool updateInvoice(id, field1, field2, ...);
   bool deleteInvoice(id);
   bool getInvoice(id);

   id createCustomer();
   bool updateCustomer(id, field1, field2, ...);
   bool deleteCustomer(id);
   bool getCustomer(id);

   // etc...
}

Ben her iki yolu (SQL) üye fonksiyonları "view" dan çok ayrılmaz olduğunu bulmak, "view" sınıfları ne olması gerektiğini belirler ve bu nedenle belge / görünüm mimarisi kırmak gibi görünüyor.

Ayrıca, örneğin bir SELECT ifadesinin yalnızca neyin gerekli olduğunu seçmesi gibi bir verimsiz gibi görünmektedir, ancak Fatura'da üye değişkenlerin varlığı "garantili veriler" anlamına gelmektedir.

Soruyu net bir şekilde açıklayıp açıklamadığımı bilmiyorum, Bu mimariye / tasarım modeline / bilindiği gibi diğer en iyi yaklaşımlar nelerdir?

Tavsiyeler için teşekkürler

Yanıtlar:


14

Sanırım bir ORM kullanabilirsiniz.

Ama gerçekten, veritabanı tasarımı OOP prensiplerini takip ETMEMELİ, normalleştirme gibi veritabanı tasarımı prensiplerini takip etmelidir. Ve uygulamada değil veritabanında tasarlanmalıdır. Ve veri bütünlüğü kuralları uygulama tarafından değil, veritabanı düzeyinde uygulanmalıdır.

Bazı veritabanı tasarım kitaplarını okumanızı ve daha sonra, seçtiğiniz veritabanını ayarlama performansını okumanızı öneririm.


5
+1 için her şey OOP olmalı (bazı ORM'ler oldukça güzel olsa bile!)
Javier

1
O / RM'ler güzel, ancak bunları kullanmak iyi bir veritabanı tasarımına uygun olamayacağınız anlamına gelmez.
BlackICE

1
@David, bunun ne yaptığını bilen birinin elinde olduğunu kabul ediyorum. Ve bir ORM'ye bakmasını önerdim, ama önce veritabanı tasarımını bilmiyorsanız, ORM tehlikeli bir araçtır.
HLGEM

Veri bütünlüğü kurallarının veritabanı düzeyinde uygulanabileceği iyi bir nokta. Ancak, kurallar değişebilirse ve uygulamaya yalnızca bazı veriler ('proje her zaman 5'ten fazla ekip üyesi içermelidir' gibi) koymak mantıklıdır ve yalnızca uygulama verileri değiştirecektir.
Jon Onstott

Uygulama neredeyse hiçbir zaman verileri değiştiren tek şey değildir. Veritabanına konmayan iş kuralları, birilerinin bazı veri düzeltmelerini desteklemek için büyük bir veri kümesinde hızlı bir değişiklik yapması gerektiğinde kolayca ihlal edilebilir.
HLGEM

10

Veritabanının uygulanmasını kapsayan OOP yaklaşımını tamamlayan bir yapı bulamıyorum

Nesne-ilişkisel empedans uyumsuzluğunu açıkladığınız anlaşılıyor .

Bu OODBMS, ORM araçlarını, bir dizi veri erişim aracını çözmesi gereken birçok şey var .

Bence çok fazla çözüm olması beni One True Solution ™ 'ın var olmadığına inandırıyor.

Böylece, bazı insanların ondan nefret edeceği ve bazılarının seveceği bilgisiyle güvenli istediğiniz herhangi bir yönü seçebilirsiniz.


Görünüşe göre, daha titiz bir şekilde.
Jake

2

Bir ORM sarıcı kullanmak istemiyorsanız, MongoDB gibi OOP tarzı depolamayı destekleyen bir veritabanı kullanın .

MongoDB (dan "hu Mongo bize") bir çapraz platform belge odaklı veritabanı sistemi. Bir "olarak sınıflandırılır NoSQL " veritabanında, MongoDB geleneksel masa tabanlı kaçınan ilişkisel veritabanı lehine yapısını JSON dinamik şemalar ile belgeleri (MongoDB biçimi çağırır benzeri BSON daha kolay ve hızlı uygulamalar belirli türdeki verilerin entegrasyonunu yaparak,). ..

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.