Doğru veritabanı tasarımı, doğru nesne tasarımı gibi bir şey değildir.
Veritabanını basitçe nesnelerinizi serileştirmek dışında başka bir amaçla kullanmayı planlıyorsanız (raporlar, sorgulama, çoklu uygulama kullanımı, iş zekası vb.), O zaman nesnelerden tablolara herhangi bir basit eşleştirme önermem.
Pek çok insan bir veritabanı tablosundaki bir satırı bir varlık olarak düşünür (bu terimlerle uzun yıllar boyunca düşündüm), ancak bir satır bir varlık değildir. Bu bir öneridir. Bir veritabanı ilişkisi (yani tablo), dünya hakkında bazı gerçekleri ifade eder. Satırın varlığı gerçeğin doğru olduğunu gösterir (ve tersine, yokluğu gerçeğin yanlış olduğunu gösterir).
Bu anlayışla, nesne yönelimli bir programdaki tek bir türün bir düzine farklı ilişkide saklanabileceğini görebilirsiniz. Ve çeşitli türler (kalıtım, ilişkilendirme, birleştirme ile birleştirilmiş veya tamamen bağımsız) tek bir ilişkide kısmen depolanabilir.
Kendinize, hangi gerçekleri saklamak istediğinizi, hangi soruların yanıtlarını isteyeceğinizi, hangi raporları oluşturmak istediğinizi sormanız en iyisidir.
Uygun DB tasarımı oluşturulduktan sonra, nesnelerinizi bu ilişkilere göre serileştirmenize izin veren sorgular / görünümler oluşturmak basit bir konudur.
Misal:
Bir otel rezervasyon sisteminde, Jane Doe'nin Seaview Inn'de 10-12 Nisan tarihlerinde bir oda için rezervasyonu olduğu gerçeğini kaydetmeniz gerekebilir. Bu, müşteri varlığının bir özelliği mi? Otel varlığının bir niteliği mi? Müşteri ve oteli içeren mülklere sahip bir rezervasyon işletmesi mi? Nesne yönelimli bir sistemdeki bunlardan herhangi biri veya tümü olabilir. Bir veritabanında, bunların hiçbiri değildir. Bu sadece çıplak bir gerçektir.
Farkı görmek için aşağıdaki iki sorguyu düşünün. (1) Jane Doe'nin gelecek yıl için kaç otel rezervasyonu var? (2) Seaview Inn'de 10 Nisan için kaç oda rezerve edildi?
Nesneye yönelik bir sistemde, sorgu (1) müşteri varlığının bir niteliğidir ve sorgu (2), otel varlığının bir özniteliğidir. Bunlar, bu özellikleri API'lerinde açığa çıkaracak nesnelerdir. (Yine de, açıkça bu değerlerin elde edildiği iç mekanizmalar diğer nesnelere referansları içerebilir.)
İlişkisel bir veritabanı sisteminde, her iki sorgu da sayılarını almak için rezervasyon ilişkisini inceler ve kavramsal olarak başka herhangi bir "varlık" ile uğraşmaya gerek yoktur.
Bu nedenle, uygun bir ilişkisel veri tabanının yapılandırılması, varlıkları niteliklerle depolamaya çalışmak yerine, dünya hakkındaki gerçekleri saklamaya çalışmaktır. Düzgün bir şekilde tasarlandıktan sonra, tasarım aşamasında hayal bile edilemeyen faydalı sorgular kolayca oluşturulabilir, çünkü bu sorguları yerine getirmek için gereken tüm gerçekler uygun yerlerinde.