Yeni başlayanlar için SQL veritabanı tasarımı kılavuzu [kapalı]


127

SQL çözümlerinin nasıl tasarlanacağını öğrenmek için iyi bir kaynak biliyor musunuz?

Temel dil sözdiziminin ötesinde, anlamama yardımcı olacak bir şey arıyorum:

  1. Hangi tablolar oluşturulur ve nasıl bağlanır
  2. Farklı ölçekler için nasıl tasarım yapılır (küçük istemci APP'si büyük bir dağıtılmış web sitesine)
  3. Etkili / verimli / zarif SQL sorguları nasıl yazılır

Yanıtlar:


60

Bu kitapla başladım: İlişkisel Veritabanı Tasarımı Açıkça Açıklandı (The Morgan Kaufmann Series in Data Management Systems) (Paperback) by Jan L. Harrington ve bunu çok açık ve yararlı buldum

ve hızlandıkça bu da iyiydi Veritabanı Sistemleri: Tasarım, Uygulama ve Yönetim İçin Pratik Bir Yaklaşım (Uluslararası Bilgisayar Bilimleri Serisi) (Ciltsiz Kitap)

Bence SQL ve veritabanı tasarımı farklı (ancak tamamlayıcı) beceriler.


1
Veritabanı Tasarımına Başlamak: Acemiden Uzmana - Clare Churcher?
enthusiasticgeek

40

Bu yazı ile başladım

http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html

Bir kitabın tamamını okumakla karşılaştırıldığında oldukça özlü ve veritabanı tasarımının temellerini (normalleştirme, ilişki türleri) çok iyi açıklıyor.


Bu kılavuzu seviyorum, teşekkürler.
MsO

Bu yanıttaki bağlantı artık çalışmıyor.
Grizzly Peak Software

1
Görünüşe göre bağlantı tekrar çalışıyor.
user8576017

1
Bağlantı artık çalışmıyor
jat255


28

Deneyim çok önemlidir, ancak masa tasarımı açısından Hibernate ve Grails gibi ORM'lerin neden bir şeyler yaptıklarını görmek için nasıl çalıştıklarından çok şey öğrenebilirsiniz. Ek olarak:

  1. Farklı veri türlerini ayrı tutun - adresleri sipariş tablonuzda saklamayın, örneğin ayrı bir adres tablosundaki bir adrese bağlantı verin.

  2. Kişisel olarak, birincil anahtar olan her tabloda (farklı tabloları birbirine bağlayanlar değil, verileri tutan) bir tam sayı veya uzun vekil anahtar bulundurmayı seviyorum.

  3. Ayrıca oluşturulmuş ve değiştirilmiş bir zaman damgası sütununa sahip olmayı da seviyorum.

  4. Herhangi bir sorguda yaptığınız "where column = val" yaptığınız her sütunun bir dizini olduğundan emin olun. Veri türü için belki de dünyadaki en mükemmel dizin değil, en azından bir dizin.

  5. Yabancı anahtarlarınızı ayarlayın. Ayrıca, nesne yapınıza bağlı olarak basamaklı veya boş ayarlamak için ilgili yerlerde SİLİNME ve DEĞİŞTİRME kurallarını ayarlayın (böylece nesne ağacınızın 'başından' yalnızca bir kez silmeniz gerekir ve bu nesnenin tüm alt nesneleri otomatik olarak kaldırılır).

  6. Kodunuzu modüler hale getirmek istiyorsanız, DB şemanızı modüler hale getirmek isteyebilirsiniz - örneğin, burası "müşteriler" alanı, bu "siparişler" alanı ve burası "ürünler" alanı ve birleştirme / bağlantı tablolarını kullanın bunlar arasında, 1: n ilişki olsalar bile ve belki önemli bilgileri çoğaltın (yani, ürün adını, kodunu, fiyatını sipariş_ayrıntıları tablonuza kopyalayın). Normalleştirme hakkında bilgi edinin.

  7. Başkası yukarıdakilerin bazıları veya tümü için tam tersini önerecektir: p - asla bazı şeyleri yapmanın doğru yolu değil eh!


1
ORM, tüm noktalarınız anti-veritabanıdır .
PerformanceDBA

1
Dizin eklemek her zaman daha fazla hız anlamına gelmez. Bazen sorguları gerçekten yavaşlatırlar. Bu gerçekten sorguya bağlıdır ve explain analyzebir dizinin fayda olup olmadığını test etmelisiniz .
ArashM



2

Benim görüşüme göre bunlar, farklı alanlardan farklı bilgiler gerektiren sorulardır.

  1. Önceden "hangi" tabloları oluşturacağınızı bilemezsiniz, problemi bilmeniz ve şemayı buna göre tasarlamanız gerekir;
  2. Bu, veritabanı tasarım kararı ve veritabanı satıcınızın özel yeteneklerinin bir karışımıdır (yani (r) dbms'nizin belgelerini kontrol etmeli ve sonunda ölçeklendirme için bazı "ipuçları ve püf noktaları" öğrenmelisiniz), ayrıca dbms'nizin yapılandırması aşağıdakiler için çok önemlidir: ölçekleme (çoğaltma, veri bölümleme vb.);
  3. yine, hemen hemen her rdbms, SQL dilinin belirli bir "lehçesi" ile birlikte gelir, bu nedenle verimli sorgular istiyorsanız, o belirli lehçeyi --btw öğrenmeniz gerekir. Muhtemelen, aynı zamanda verimli olan zarif bir sorgu yazmak büyük bir meseledir: zarafet ve verimlilik genellikle birbiriyle çelişen hedeflerdir -

Bununla birlikte, belki bazı kitapları okumak istersiniz, kişisel olarak bu kitabı veri tabanı üniversite dersimde kullandım (ve iyi bir tane buldum, ancak bu alandaki diğer kitapları okumadım, bu yüzden tavsiyem, veritabanı tasarımında bazı iyi kitaplar).


2

Okuyalı epey oldu (bu yüzden ne kadarının hala alakalı olduğundan emin değilim), ancak hatırladığım kadarıyla Joe Celko'nun Smarties için SQL kitabı zarif, etkili ve verimli sorgular yazma konusunda pek çok bilgi sağlıyor. .


dördüncü baskı 2010 güncel olabilir
rleir

1
Celko kitabı, hatalar üzerine bir çalışmadır ve kodda uygulama kavramını, veritabanında nelerin uygulanması gerektiğini ilerletmektedir.
PerformanceDBA
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.