Yüksek Performanslı Uygulamalar için Veritabanı Tasarımı En İyi Uygulaması

Yayınlanan: 2021-07-19

Bir uygulamanın iyi bir performans göstermesi için güçlü bir uygulama sunucusuna, garantili ve geniş bir bant genişliğine ve iyi yapılmış bir programlama işine ihtiyacınız vardır. Ancak, her zaman dikkate alınmayan ve genellikle herhangi bir uygulamanın performansı üzerinde büyük etkisi olan bir yön vardır: veritabanı tasarımı .

Şimdi veri erişiminin uygulama performansını olumsuz etkileyen bir darboğaz olmadığından emin olmak için veritabanı tasarımı en iyi uygulamalarına bakacağız.

İyi bir veritabanı tasarımının amacı nedir?

İyi bir tasarım, veri erişim performansını iyileştirmenin yanı sıra, veri tutarlılığını, doğruluğunu ve güvenilirliğini korumak ve fazlalıkları ortadan kaldırarak depolama alanını azaltmak gibi başka faydalar da sağlar. İyi tasarımın bir başka faydası da veritabanının kullanımı ve bakımının daha kolay olmasıdır. Onu yönetmesi gereken herkesin yapısını anlamak için varlık-ilişki diyagramına (ERD) bakması yeterli olacaktır.

ERD'ler, veritabanı tasarımının temel aracıdır. Üç tasarım düzeyinde oluşturulabilir ve görselleştirilebilirler: kavramsal , mantıksal ve fiziksel .

Kavramsal tasarım, veri tabanının teknik detaylarını anlaması gerekmeyen proje paydaşları ile kriterler üzerinde anlaşmak için gerekli unsurlarla birlikte, çok özetlenmiş bir diyagramı göstermektedir. Mantıksal tasarım, varlıkları ve bunların ilişkilerini ayrıntılı olarak ancak veritabanından bağımsız bir şekilde gösterir.

ERD'lerden veritabanlarının tasarımını kolaylaştırmak için kullanabileceğiniz birçok araç vardır. En iyileri arasında DbSchema , SqlDBM ve Vertabelo bulunmaktadır .

DbŞema

DbSchema, SQL, NoSQL veya Bulut veritabanlarını görsel olarak tasarlamanıza ve yönetmenize olanak tanır. Araç, şemayı bir bilgisayarda tasarlamanıza ve onu birden çok veritabanına dağıtmanıza ve diğerlerinin yanı sıra HTML5 diyagramlarında belgeler oluşturmanıza, sorgular yazmanıza ve verileri görsel olarak keşfetmenize olanak tanır. Ayrıca şema senkronizasyonu, rastgele veri üretimi ve otomatik tamamlama ile SQL kodu düzenlemesi sunar.

Youtube videosu

SqlDBM

SqlDBM, veritabanınızı herhangi bir tarayıcıda tasarlamanın kolay bir yolunu sağladığı için en iyi veritabanı diyagramı tasarım araçlarından biridir. SqlDBM, mevcut bir veritabanından bir şema içe aktarmanıza izin verse de, onu kullanmak için başka bir veritabanı motoru veya modelleme aracı gerekmez. Tasarım projelerini iş arkadaşlarınızla paylaşmanıza izin verdiği için ekip çalışması için idealdir.

Vertabelo

Vertabelo, bir veritabanını mantıksal olarak tasarlamanıza ve fiziksel şemayı otomatik olarak türetmenize olanak tanıyan çevrimiçi bir görsel veritabanı tasarım aracıdır. Tersine mühendislik yapabilir, mevcut veritabanlarından diyagramlar oluşturabilir ve sahiplere, editörlere ve görüntüleyicilere erişim ayrıcalıklarını farklılaştırarak diyagramlara erişimi kontrol edebilir.

Youtube videosu

Son olarak, fiziksel tasarım, MySQL, MariaDB, MS SQL Server veya başka herhangi bir belirli bir DBMS'de kullanılabilir bir veritabanına dönüştürmek için gerekli tüm ayrıntıları ERD'ye ekleyen tasarımdır. Ortaya çıkan veritabanının en iyi şekilde çalışması için bir ERD tasarlarken akılda tutulması gereken en iyi uygulamalara bir göz atalım.

Tasarlanacak veritabanı türünü tanımlayın

İki temel veri tabanı türü genellikle ayırt edilir: ilişkisel ve boyutsal .

İlişkisel veritabanları, veriler üzerinde işlem yürüten, yani veri tabanından bilgi alan, onu işleyen ve sonuçları depolayan geleneksel uygulamalar için kullanılır.

Öte yandan, Boyutlu veritabanları, veri ambarlarının oluşturulması için kullanılır: veri analizi için büyük bilgi havuzları ve içgörü elde etmek için veri madenciliği.

İlişkisel bir veritabanı tasarımı
Boyutlu bir veritabanı tasarımı

Herhangi bir veritabanı tasarım görevindeki ilk adım, birlikte çalışılacak iki ana veritabanı türünden birini seçmektir: ilişkisel veya boyutsal. Tasarıma başlamadan önce bunu netleştirmek çok önemlidir. Aksi takdirde, sonunda birçok soruna yol açacak ve düzeltilmesi zor (veya imkansız) olacak tasarım hatalarına kolayca düşebilirsiniz.

Bir Adlandırma Kuralını Kabul Etme

Veritabanı tasarımında kullanılan adlar önemlidir, çünkü bir veritabanında bir nesne oluşturulduktan sonra adını değiştirmek ölümcül olabilir. Adın yalnızca bir harfini değiştirmek, bağımlılıkları, ilişkileri ve hatta tüm sistemleri bozabilir.

Bu nedenle sağlıklı bir adlandırma kuralıyla çalışmak çok önemlidir: sizi hatırlayamadığınız bir nesnenin adını bulmak için 50 farklı olasılık deneme zahmetinden kurtaran bir dizi kural.

Bir adlandırma kuralının işini yapması için ne olması gerektiğine dair evrensel bir kılavuz yoktur. Ancak önemli olan, bir veritabanındaki herhangi bir nesneyi adlandırmadan önce bir adlandırma kuralı oluşturmak ve bu kuralı sonsuza kadar sürdürmektir. Bir adlandırma kuralı, sözcükleri ayırmak için bir alt çizgi kullanılıp kullanılmayacağına veya doğrudan bir araya getirilip getirilmeyeceğine, tüm büyük harflerin mi yoksa sözcüklerin büyük harf mi kullanılacağına (Camel Case stili), nesneleri adlandırmak için çoğul veya tekil sözcüklerin kullanılıp kullanılmayacağına vb. ilişkin yönergeleri belirler.

Kavramsal tasarımla başlayın, ardından mantıksal tasarım ve son olarak fiziksel tasarım.

İşin doğal düzeni bu. Bir tasarımcı olarak, adımları atlamak için doğrudan DBMS'de nesneler oluşturarak başlamak isteyebilirsiniz. Ancak bu, tasarımın iş gereksinimlerini karşıladığından emin olmak için paydaşlarla tartışabileceğiniz bir araca sahip olmanızı engelleyecektir.

Kavramsal tasarımdan sonra, programcıların veritabanı yapısını anlamasına yardımcı olacak yeterli belgelere sahip olmak için mantıksal tasarıma geçmelisiniz. Kullanılacak veritabanı motorundan bağımsız olarak mantıksal tasarımın güncel tutulması hayati önem taşır. Bu şekilde, sonunda veritabanını farklı bir motora geçirirseniz, mantıksal tasarım yine de faydalı olacaktır.

Son olarak, fiziksel tasarım, mantıksal tasarımı alıp belirli bir DBMS'de uygulamak için gereken tüm uygulama ayrıntılarını ekleyerek programcıların kendileri veya bir DBA tarafından oluşturulabilir.

Bir veri sözlüğü oluşturun ve bakımını yapın

Bir ERD açık ve açıklayıcı olsa bile, onu daha da net hale getirmek için bir veri sözlüğü eklemelisiniz. Veri sözlüğü, özellikle içindeki nesnelerin sayısı önemli ölçüde arttığında, veritabanı tasarımında tutarlılığı ve tutarlılığı korur.

Veri sözlüğünün temel amacı, bir veri modelinin varlıkları ve nitelikleri hakkında tek bir referans bilgi havuzunu korumaktır. Veri sözlüğü, tüm varlıkların adlarını, tüm niteliklerin adlarını, biçimleri ve veri türlerini ve her birinin kısa bir açıklamasını içermelidir.

Veri sözlüğü, veritabanını oluşturan tüm öğeler için açık ve özlü bir kılavuz sağlar. Bu, aynı şeyi temsil eden birden çok nesne oluşturmaktan kaçınır, bu da bilgileri sorgulamanız veya güncellemeniz gerektiğinde hangi nesneye başvuracağınızı bilmeyi zorlaştırır.

Birincil anahtarlar için tutarlı ölçütleri koruyun

Doğal anahtarları veya yedek anahtarları kullanma kararı, bir veri modeli içinde tutarlı olmalıdır. Bir veri modelindeki varlıkların, ilgili tablolarının birincil anahtarları olarak verimli bir şekilde yönetilebilecek benzersiz tanımlayıcıları varsa, yedek anahtarlar oluşturmaya gerek yoktur.

Ancak varlıkların farklı türlerde birden çok öznitelikle (tarihler, sayılar ve/veya uzun karakter dizileri) tanımlanması yaygındır ve bu, birincil anahtarların oluşturulmasında yetersiz olabilir. Bu durumlarda, dizin yönetiminde maksimum verimlilik sağlayan tamsayı sayısal türünde vekil anahtarlar oluşturmak daha iyidir. Ve bir varlığın onu benzersiz bir şekilde tanımlayan niteliklerden yoksun olması durumunda vekil anahtar tek seçenektir.

Doğal birincil anahtarlı bir tablo (solda) ve vekil anahtarlı bir tablo (sağda)

Her öznitelik için doğru veri türlerini kullanın.

Belirli veriler bize, onları temsil etmek için hangi veri türünün kullanılacağını seçme seçeneği sunar. Örneğin tarihler. Bunları tarih türü alanları, tarih/saat türü alanları, varchar türü alanları ve hatta sayısal tür alanları içinde saklamayı seçebiliriz. Başka bir durum, matematiksel işlemler için değil, ehliyet numarası veya posta kodu gibi bir varlığı tanımlamak için kullanılan sayısal verilerdir.

Tarihler söz konusu olduğunda, verilerin işlenmesini kolaylaştıran motorun veri türünü kullanmak uygundur. Saati belirtmeden yalnızca bir olayın tarihini saklamanız gerekiyorsa, seçilecek veri türü yalnızca Tarih olacaktır; belirli bir olayın gerçekleştiği tarih ve saati saklamanız gerekiyorsa, veri türü DateTime olmalıdır.

Tarihleri ​​saklamak için varchar veya numeric gibi diğer türleri kullanmak uygun olabilir, ancak yalnızca çok özel durumlarda. Örneğin bir tarihin hangi formatta ifade edileceği önceden bilinmiyorsa varchar olarak saklanması uygundur. Arama performansı, sıralama veya dizin oluşturma, tarih türü alanların işlenmesinde kritik öneme sahipse, önceki bir kayan noktalı dönüşüm bir fark yaratabilir.

Matematiksel işlemlerde yer almayan sayısal veriler, tutarsızlıkları veya tekrarları önlemek için kayıtta biçim doğrulamaları uygulayarak varchar olarak gösterilmelidir. Aksi takdirde, bazı verilerin sayısal alanların sınırlarını aşması ve sizi bir tasarımın üretim aşamasındayken yeniden düzenlemeye zorlaması riskine maruz kalırsınız.

Arama tablolarının kullanımı

Bazı deneyimsiz tasarımcılar, bir tasarımı normalleştirmek için arama tablolarının aşırı kullanımının, bazen bir avuçtan fazla öğeye sahip olmayan çok sayıda "uydu" tablosu eklediğinden, bir veritabanının ERD'sini gereksiz yere karmaşıklaştırabileceğine inanabilirler. Bunu düşünenler, arama tablolarının kullanımının dezavantajlardan çok daha fazla yararı olduğunu anlamalıdır. Bir ERD'nin karmaşıklığı veya boyutu bir sorunsa, karmaşıklıklarına rağmen anlaşılması için diyagramları farklı şekillerde görselleştirmenize izin veren ERD tasarım araçları vardır.

Bu örnek sorgu, iyi tasarlanmış bir veritabanında arama tablolarının doğru kullanımını gösterir:

 SELECT StreetName, StreetNumber, Cities.Name AS City, States.Name AS State FROM Addresses INNER JOIN Cities ON Cities.CityId = Addresses.CityId INNER JOIN States ON States.StateId = Addresses.StateId

Bu durumda, Şehirler ve Eyaletler için arama tabloları kullanıyoruz.

Arama tablolarının faydaları arasında veritabanının boyutunun küçültülmesi, arama performansının iyileştirilmesi ve diğerlerinin yanı sıra bir alanın içerebileceği geçerli veri kümesine kısıtlamalar getirilmesi yer alır. Ayrıca, tüm arama tablolarının, tablodaki bir kaydın kullanımda olup olmadığını veya eski olup olmadığını gösteren bir Bit veya Boole alanı içermesi iyi bir uygulamadır. Bu alan, uygulama kullanıcı arayüzünde seçenekler olarak kullanılmayan öğeleri önlemek için bir filtre olarak kullanılabilir.

Veritabanı türüne göre normalleştirme veya normalleştirme

Geleneksel uygulamalar için kullanılan ilişkisel veritabanlarında normalleştirme bir zorunluluktur. Normalleştirmenin, fazlalıklardan kaçınarak gerekli depolama alanını azalttığı iyi bilinmektedir. Bilgi kalitesini artırır ve karmaşık sorgularda performansı optimize etmek için birden çok araç sağlar.

Ancak, diğer veritaban türlerinde denormalizasyon olarak bilinen bir teknik uygulanır. Veri ambarları olarak kullanılan boyutlu veritabanlarında denormalizasyon, şema tablolarına bazı yararlı fazlalık bilgileri ekler.

Zıt kavramlar gibi görünseler de denormalizasyon normalizasyonu bozmak anlamına gelmez. Aslında, sorgu yazma ve raporlamayı basitleştirmek için normalleştirdikten sonra bir veri modeline uygulanan bir optimizasyon tekniğidir.

Parçalar halinde fiziksel modeller tasarlama

Bir yazılım geliştirme projesinde, veritabanı tasarımcısı, paydaşlara hiçbir uygulama detayının gösterilmediği büyük ölçekli bir kavramsal model sunar. Buna karşılık, geliştiricilerle çalışmak için tasarımcı, her bir varlığın ve niteliğin tüm ayrıntılarını içeren fiziksel bir model sağlamalıdır. Ancak, her iki modelin de projenin başında tamamen oluşturulmasına gerek yoktur.

Çevik metodolojileri uygularken, her geliştirme döngüsünün başındaki her geliştirici, bu döngü sırasında çalışmak için bir veya daha fazla kullanıcı hikayesi alır. Veritabanı tasarımcısının işi, her geliştiriciye yalnızca bir çalışma birimi için ihtiyaç duydukları nesneleri içeren fiziksel bir alt model sağlamaktır.

Her geliştirme döngüsünün sonunda, bu döngü sırasında oluşturulan alt modeller birleştirilir, böylece tüm fiziksel model, uygulamanın gelişimine paralel olarak şekillenir.

Görünümleri ve dizinleri iyi kullanmak

Görünümler ve dizinler, uygulama performansını artırmak için veritabanı tasarımında iki temel araçtır. Görünümlerin kullanımı, gereksiz tablo ayrıntılarını gizleyerek sorguları basitleştiren soyutlamaların işlenmesine olanak tanır. Buna karşılık görünümler, verilerin nasıl elde edileceğini tahmin etmelerine ve sorgu sonuçlarını daha hızlı sunmak için en iyi stratejileri seçmelerine olanak tanıdığından, veritabanı motorları için sorgu optimizasyon görevlerini kolaylaştırır.

Dizinler, veritabanı üretime girdikten sonra kullanıcı deneyimine dayalı olarak yavaş bir sorgunun performansını iyileştirebilir. Ancak dizin oluşturma, uygulamanın ihtiyaçlarını öngörerek veritabanı tasarım görevlerinin bir parçası olarak yapılabilir.

İndekslerin oluşturulması için, her tablonun büyüklüğü hakkında - kayıt sayısı açısından - yaklaşık bir fikre sahip olmanız ve ardından daha büyük tablolar için indeksler oluşturmanız gerekir. Bir dizine dahil edilecek alanları seçmek için öncelikle yabancı anahtarları temsil edenleri ve aramalarda filtre olarak kullanılacakları göz önünde bulundurmalısınız.

İşin bittiğini düşündüğünüzde, yeniden düzenleme zamanı.

Bir veritabanının tasarımı her zaman geliştirilebilir. Yeni gereksinimler veya yeni iş ihtiyaçları nedeniyle veritabanında herhangi bir değişiklik olmadığında, tasarımı iyileştiren yeniden düzenleme prosedürlerini gerçekleştirmek için iyi bir fırsattır. Yeniden düzenleme, basitçe şu anlama gelir: veritabanının anlamını etkilemeden bir tasarımı iyileştiren değişiklikleri tanıtmak.

Bu makalenin kapsamı dışında kalan bir veritabanının tasarımını geliştirmek için birçok yeniden düzenleme tekniği vardır, ancak gerektiğinde bunları kullanmak için bunların varlığını bilmek iyidir.

Bir veritabanı tasarlamanız gerektiğinde bu en iyi uygulamalar listesinin elinizin altında olması, uygulamaların veri erişiminde her zaman en iyi performansı koruması için en iyi sonuçları elde etmenizi sağlayacaktır.