Soru İlişkisel Veritabanı Tasarım Kalıpları?


Tasarım örüntüleri genellikle nesne yönelimli tasarım ile ilgilidir.
Varmı tasarım desenleri oluşturma ve programlama için ilişkisel veritabanları?
Birçok problem kesinlikle tekrar kullanılabilir çözümlere sahip olmalıdır.

Örnekler arasında masa tasarımı, saklı prosedürler, tetikleyiciler, vb.

Bu tür kalıpların çevrimiçi bir deposu var mı martinfowler.com?


Kalıpların çözebileceği sorunlara örnekler:

  • Hiyerarşik verilerin saklanması (örneğin, tekli tablo vs 1: 1 anahtarlı çoklu tablolar ve farklılıklar ...)
  • Verileri değişken yapıda saklamak (örneğin, genetik sütunlar vs xml ve ayrılmış sütun ...)
  • Verileri dengeler (en az etki ile nasıl yapılır, vb ...)

248
2017-09-28 11:44


Menşei


Hiyerarşik veri depolama için en iyi Q & A’ya hak iddia edeceğim: stackoverflow.com/questions/4048151/... - orangepips
Veritabanı modelleri için genç topluluk var. dbpatterns.com - Fatih Erikli
Bize göre Konu üzerine rehberlik, "Yukarıda listelenen kategorilerden birine girse bile bazı sorular hâlâ konu dışıdır:... Bize sorulan sorular Bir kitap, araç, yazılım kütüphanesi, eğitici veya diğer bir site dışı kaynağı öner veya bul konu dışı ... " - Robert Columbia
@RobertColumbia soru oldu Konu üzerine 2008 yılında, sorulduğunda ... - Sklivvz
İlişkisel veritabanları ve birçok yazılım mühendisliği alanında tasarım deseni kaynaklarının listesine bakın github.com/DovAmir/awesome-design-patterns - dov.amir


Cevaplar:


Martin Fowler'ın İmza Serisinde bir kitap var. Refactoring Veritabanları. Bu, veritabanlarının yeniden düzenlenmesi için tekniklerin bir listesini sağlar. Veritabanı kalıplarının bir listesini çoktan duydum diyemem.

David C. Hay'in tavsiyesiyle Veri Modeli Kalıpları ve takip Bir Meta Veri Haritası İlk üzerinde inşa ve çok daha iddialı ve ilgi çekici. Önsöz tek başına aydınlatıcıdır.

Ayrıca bazı önceden korunmuş veritabanı modellerini aramak için harika bir yer Len Silverston'un Veri Modeli Kaynak Kitabı Dizisidir. Ses seviyesi 1 evrensel olarak uygulanabilir veri modelleri (çalışanlar, hesaplar, nakliye, alımlar, vb.) içerir, Cilt 2 endüstriye özgü veri modelleri (muhasebe, sağlık, vb.) içerir, 3. cilt veri modeli modelleri sağlar.

Son olarak, bu kitap görünüşte UML ve Nesne Modelleme ile ilgili iken, Peter Coad's UML ile Renkte Modelleme herhangi bir nesnenin / veri modelinin 4 çekirdek arketipinin bulunduğundan yola çıkarak bir "arketip" odaklı bir varlık modelleme süreci sağlar.


123
2017-09-28 15:17



Kitap, Scott W. Ambler ve Pramod J. Sadalage tarafından [Refactoring Databases: Evrimsel Veritabanı Tasarımı] [1] başlıklı ve gerçekten çok iyi. [1]: ambysoft.com/books/refactoringDatabases.html - Panos
Ambler kitabıyla ilgili olarak: Hayır, aynı nedenle bir kalıp olarak "bir sütun ekleme" veya "FK kısıtlaması oluşturma" listeleyemezsiniz. 4 kitaplık Çete "for" döngüsünü bir model olarak listelemez. - Tegiri Nenashi
Bu bir model değil, bir refakatçidir. Ekstre yöntemi gibi veya parametreyi yeniden adlandırın. Refactoring ve desenler el ele gider. - Michael Brown
Eklemek için: Fowler tarafından "Analiz Kalıpları". Hay'in eşyalarına benzer - Neil McGuigan
Len Silverston'un Cilt 3'ü "Tasarım Desenleri" olarak kabul edeceğim tek şey. Kitapların yazıldığı zaman diliminde ortak olan ilk 2 gösteri örnek veri modeli. Cilt 3 aslında belirli bir problem senaryosu için birden fazla tasarım modeline sahiptir. Örneğin, bölüm 4 hiyerarşileri / kümelenmeleri / eşler arası senaryoları kapsar ve daha sonra her birinin artıları ve eksileri olanları ele alan çoklu tasarımlar sunar. - DarrellNorton


İşte yüzlerce ücretsiz veritabanı şeması geliştirmiş bir beyefendiye bir bağlantı.

http://www.databaseanswers.org/data_models/

Belki bir db'yi hızlı bir şekilde oluşturmanız gerekiyorsa, bu size verilen bir şemadaki tablolar ve ilişkiler açısından bir başlangıç ​​noktası verecektir. Bu başlangıç ​​noktasını değiştirmeniz gerektiğini unutmayın. Onu çok yararlı buldum.

İkincisi, SQL Server Magazine, çok eğitici ve genellikle belirli bir sistem için tam şemaları içeren "Veri Modelleyici" adında bir ara sıraya sahiptir.


125
2017-09-28 13:36



databaseanswers.org/tutorial4_db_schema/index.htm Bilgi sindirmek için çok kolay arıyordu ve bu benim beklentileri aştı. Bağlantı için teşekkürler. - 128KB
Bu gerçekten iyi bir bilgi, ama nasıl "tasarım desenleri" olarak nitelendirildiğini görmüyorum. Bu şemaların herhangi bir sayısı çeşitli kalıpları takip edebilir, ancak bu modeller hakkında gerçekten bilgi vermez. - Finster
Bu, şirketlerinin geçmiş müşterilerin gereksinimlerini karşıladığı konusunda harika bir koleksiyon. Onları kesin olarak kesmeyin ve yapıştırmayın. Kendi gereksinimlerinizi ayarladığınızdan emin olun. Benim durumumda onları biraz farklı uygulayabileceğim bir çift gördüm. Sorusuyla ilgili olarak "kalıp" - bunlar sizin fikriniz "Dörtlü Çete" tarzıysa - o zaman hayır. Çözümlerin daha önce nasıl uygulandığına dair iyi örneklere ihtiyacınız varsa - o zaman evet. - Catchops


Tasarım örüntüleri, üç boyutlu olarak yeniden kullanılabilir çözümler değildir.

Tasarım desenleri, tanım gereği yeniden kullanılabilir. Onlar kalıp sen Diğer iyi çözümlerde tespit edin.

Bir desen üç taraflı olarak tekrar kullanılamaz. Tasarımınızı takip ederek aşağı tasarımınızı uygulayabilirsiniz.

İlişkisel tasarım kalıpları şunları içerir:

  1. Yabancı bir anahtar kullanarak Bire Çok İlişkiler (ana-detay, ebeveyn-çocuk) ilişkileri.

  2. Bir köprü masası ile çoktan çoğa ilişkiler.

  3. FK sütununda NULL ile yönetilen isteğe bağlı bire bir ilişkiler.

  4. Yıldız Şeması: Boyut ve Gerçek, OLAP tasarım.

  5. Tamamen normalize edilmiş OLTP tasarımı.

  6. Bir boyutta birden çok endeksli arama sütunu.

  7. Bir veya daha fazla uygulama tarafından kullanılan PK, açıklama ve kod değerlerini içeren "Arama tablosu". Neden kodunuz var? Bilmiyorum, ama kullanılmaları gerektiğinde, bu kodları yönetmenin bir yoludur.

  8. Uni-tablo. [Bazıları buna anti-desen denir; Bu bir model, bazen kötü, bazen iyidir.] Bu, ikinci ve üçüncü normal formu ihlal eden önceden birleştirilmiş bir sürü içeren bir tablodur.

  9. Dizi tablosu Bu, sütunlarda bir dizi veya değer dizisine sahip olarak ilk normal formu ihlal eden bir tablodur.

  10. Karma kullanımlı veritabanı. Bu işlem işleme için normalize edilmiş bir veri tabanıdır, ancak raporlama ve analiz için çok fazla ek endeks içerir. Bu bir anti-desen - bunu yapma. İnsanlar yine de yapıyorlar, bu yüzden hala bir desen.

Veritabanlarını tasarlayan çoğu insan, bir buçuk metreden kolayca kurtulabilir. Bunlar düzenli olarak kullandıkları tasarım kalıplarıdır.

Bu, idari ve operasyonel kullanım ve yönetim kalıplarını içermez.


39
2017-10-10 12:45



Gördüğüm diğer desenler çok ebeveynli çocuk masası (diğer bir tabloya bağlanabilen bir nesne türü ve objectid ile global notalar gibi) ya da kendi kendini referans alan FK (yani, staff.manager -> çalışanı). İD). Ayrıca çok sayıda sütun içeren bir tekil bir yapılandırma tablosu kullandım. - r00fus
Neden karma kullanımlı bir veritabanı tam olarak bir anti-desendir. Raporları veritabanından almak istiyorsam ne yapmam gerekiyor? - olive
@lhnz: Çekemezsin çok arasında büyük Bir işlemsel veritabanı tasarımından raporlar - raporlama için kilitleme işlemleri yavaşlatacaktır. Karmaşık birleşimler (tekrar tekrar gerçekleştirilir) işlem performansına karşı başka bir vuruştur. Her iki veritabanında da yapamazsınız. Çok sayıda büyük rapor yapmak için verileri yıldız bir şemaya taşımalısınız. Yıldız şeması deseni raporlama için optimize edilmiştir. Ve verileri taşımak, herhangi bir kilit çekişmesini kaldırır. - S.Lott
Şemaları normalleştirmek, tabloları daha "tutarlı" verilerde tutuyorsanız satır kilidi çekişmesini azaltır mı? Benim düşüncem, eğer büyük bir tablo servis 2 çeşit veri kümesine yazıyorsa, ancak her ikisi de aynı satırda ise, bu gereksiz kilit çekişme ile sonuçlanacaktır. - CMCDragonkai


Bu bloga göz atın - Veritabanı Programcısı.

Bazılarını anlatıyor veritabanı kalıpları.


19
2017-09-28 11:33





Joe Celko'nun kitapları, özellikle "Smarties için SQL" gibi bu tür şeyler için mükemmeldir. Çoğu tekrar kullanılabilir tasarım modelleri olan ortak sorunlara yenilikçi çözümler getiriyor.

http://www.celko.com/books.htm


15
2017-10-10 09:19



Celko'nun sayfası artık gitmiş gibi görünüyor. İşte, Internet Arşivindeki sayfasının son anlık görüntüsüne giden bağlantı. web.archive.org/web/20100103051037/http://www.celko.com/... - Noe Nieto


AskTom Oracle DB'lerinde en iyi uygulamalar hakkında muhtemelen en yararlı kaynaktır. (Genelde belirli bir konudaki google sorgusunun ilk kelimesi olarak "asktom" yazarım)

İlişkisel veritabanları ile tasarım desenleri konuşmak gerçekten uygun olduğunu sanmıyorum. İlişkisel veritabanı zaten bir soruna "tasarım modeli" uygulaması vardır (sorun olma "ne, bir mağaza ve bütünlüğünü koruyarak verilerle çalışmak için" ve tasarım ilişkisel model olmak üzere). Diğer onaylar (genel olarak modası geçmiş kabul edilir), Gezinme ve Hiyerarşik modellerdir (ve birçok başkalarının varlığından eminim).

Bunu söyledikten sonra, "Veri Ambarı" nı ayrı bir "desen" veya veri tabanı tasarımında bir yaklaşım olarak düşünebilirsiniz. Özellikle, hakkında okuma ilginizi çekebilir Yıldız şeması.


6
2017-09-28 11:55





Uzun yıllardan beri veritabanı geliştirdikten sonra, bazı soruların ve başlamadan önce yanıtlamanız gereken bazı soruların olduğunu söyleyebilirim:

sorular:

  • Gelecekte başka bir DBMS kullanmak ister misiniz? Varsa, o zaman mevcut DBMS'nin özel SQL nesnelerine kullanılmaz. Uygulamanızdaki mantığı kaldırın.

Kullanmaz:

  • Tablo isimleri ve sütun isimlerindeki beyaz boşluklar
  • Tablo ve sütun adlarındaki Ascii olmayan karakterler
  • Belirli bir küçük harfe veya büyük harfe bağlanır. Ve asla yalnızca küçük harf ve büyük harf ile farklı olan 2 tablo veya sütun kullanmayın.
  • "FROM", "BETWEEN", "DELETE", vb. gibi tablo veya sütun adları için SQL anahtar sözcükleri kullanmaz

recomendations:

  • Unicode desteği için NVARCHAR veya eşdeğerlerini kullanın, daha sonra kod sayfalarıyla ilgili sorun yaşamayabilirsiniz.
  • Her bir sütuna benzersiz bir isim verin. Bu, sütunu seçmek için birleştirmeyi kolaylaştırır. Her tablonun bir "ID" veya "İsim" veya "Tanım" sütunları olması çok zordur. XyzID ve AbcID kullanın.
  • Karmaşık SQL ifadeleri için bir kaynak paketi veya eşittir. Başka bir DBMS'ye geçmeyi kolaylaştırır.
  • Herhangi bir veri türü üzerinde zorlanmaz. Başka bir DBMS bu veri türüne sahip olamaz. Örneğin, Oracle daes SMALLINT'in yalnızca bir numarası yoktur.

Umarım bu iyi bir başlangıç ​​noktasıdır.


4
2017-09-28 12:18



Yorumlarınız oldukça öğretici ve yararlı olsa da, tasarım kalıpları değildir. Onlar en iyi uygulamalardır. Teşekkürler, - Sklivvz
Benzersiz sütun adları için öneriye katılmıyorum. Ben disambiguate için hiçbir şey yok olsa bile customerid söylemek için customer.id müşteri söylemek diyorum. - Paul Tomblin


Senin sorunun biraz belirsiz, ama sanırım UPSERT bir tasarım deseni olarak düşünülebilir. Uygulanmayan diller için MERGE, sorunu çözmek için bir dizi alternatif (uygun bir satır varsa, UPDATE; Başka INSERT) var olmak.


1
2017-09-30 04:12



UPSERT bir komut ve SQL dilinin bir parçasıdır. Bu bir model değil. - Todd R
UPSERT, SQL dilinin bazı türevlerinde bir komuttur - bazı platformlar buna sahip değildir veya yalnızca son zamanlarda almışlardır. - Steve Homer
@ToddR - (biraz sinik olarak), "kalıpların" bir dil veya modeldeki eksikliklerden başka bir şey olmadığını, kullanıcının iş çevreleri oluşturması gerektiğini duydum. UPSERT’in ne yaptığını bilmiyorum ama bazı SQL'ler ve diğerleri değil, bir modeldir. - Martin F