İlk önce Veritabanına Karşı İlk Kod


77

Çalıştığım yazılımı tasarladığımda ve oluşturduğumda, tipik olarak önce arka uç SQL tablolarını tasarlayıp yaratıyorum ve sonra gerçek programlamaya geçiyorum. Şu anda üzerinde çalışmakta olduğum proje beni şaşırtıyor. Bu muhtemelen iyi ve sağlam gereksinimlerin bulunmamasından kaynaklanıyor, ancak maalesef bu sefer yapabileceğim çok az şey var. Bu bir "sadece git başaralım" şeklinde bir durumdur .. ama dalıyorum.

İş akışımı kafasına çevirmeyi düşünüyorum ve ilk önce UI ve veri modeli sınıflarını oluşturmayı umuyorum, bu çalışmanın benim için veritabanı şemasının neye benzeyeceğini netleştireceğini umuyorum. Bu iyi bir fikir mi? UI ile sonuçlanacağım ve hala db'yi nasıl yapılandıracağım hakkında hiçbir fikrim olmadığı için gerginim.

Merak eden varsa, arka uç olarak SQL Server ve ön uç uygulama olarak MS Access kullanıyorum. (Erişim benim seçimim de değil ... bu yüzden lütfen ondan nefret etme.)



6
@gnat: Bu tamamen farklı.
Robert Harvey

1
Eğer bu bir kopya olarak kapanırsa, bu sorunun bir kopyası olmalıdır . Cevaplar ve soru, sorduğum şeyle daha uyumlu.
RubberDuck

1
@Mawg bu bir iş projesidir. İhtiyaçları kısmak için elimden geldiğince zorladım. İş bu konuda başlamalı ve daha fazla yapabileceğim bir şey yok.
RubberDuck

4
Errrm, yeni iş? Yapacağımı biliyorum. Ancak 30 yıllık bir serbest meslek sahibi olarak, fana gerçekten vurmadan önce çekip gitmeyi kolay buluyorum (bazılarının yardım edemeyeceği bazı insanlar), ama bunun herkes için kolay olmadığını fark ettim. Alanda, vb), ancak sizi etkilemeye başlarsa
kalmayın

Yanıtlar:


85

İlk olarak neyin geldiği, süreç veya bu işlem tarafından kullanılan veriler? Bunun bir tür "tavuk veya yumurta" sorusu olduğunu biliyorum, ancak yazılım durumunda, sürecin bu olduğuna inanıyorum.

Örneğin, yalnızca bellek içi kalıcılığa sahip (veya uygulaması kolay olan herhangi bir şey) olan tek bir kullanım vakasını uygulayarak veri modelinizi adım adım oluşturabilirsiniz. Temel varlıkları ana hatlarıyla belirtmek için yeterli kullanım şekli uyguladığınızı hissettiğinizde, bellek içi kalıcılığını gerçek bir veritabanı ile değiştirebilir ve daha sonra bir seferde bir kullanım durumunda olan şemayı iyileştirmeye devam edebilirsiniz.

Bu, odağı veritabanından alır ve problemin özüne taşır: iş kuralları. İş kurallarını uygulamaya başlarsanız, sonunda işletme tarafından hangi verilere gerçekten ihtiyaç duyulduğunu (bu arada Doğal Seçime çok benzeyen bir işlemle) bulacaksınız. Veritabanını modelleyerek başlıyorsanız, bu verinin gerçekten gerekli olup olmadığına (veya bu biçimde veya normalleştirme düzeyinde, vb.) Geri bildirim vermeden, ya da şema (işletme zaten çalışıyorsa, ağır geçiş prosedürleri gerektirebilir) veya uyumsuz veri modelini oluşturmak için iş kurallarında "geçici çözümler" uygulamanız gerekir.

TL; DR: Veritabanı işletmeye bağlı olarak belirlenir - bunlar tarafından tanımlanır. Onunla çalışan bir işleminiz olmadıkça verilere ihtiyacınız olmaz (bir rapor da bir işlemdir). Öncelikle süreci uygulayın, hangi verilere ihtiyaç duyduğunu bulacaksınız. İlk önce verileri modelleyin ve ilk modellendiğinde kaç tane varsayımın yanlış olduğunu saymanız mümkün olabilir.

Konunun biraz dışında ama çok önemli: Açıkladığım iş akışı, "İşe yarayabilecek en basit şey", test odaklı geliştirme ve mimarlığınızı ayrıntılardan ayırmaya odaklanma gibi çok önemli uygulamalarla birlikte kullanılır. istediğin gibi ol (ipucu: veritabanı). Sonuncusu hakkında, bu konuşma fikri oldukça iyi özetliyor.


1
Msgstr "Veri tabanı bir ayrıntıdır". Bağlantı için çok teşekkür ederim. Tüm bu konuşmayı izledikten sonra veritabanını ertelenmiş bir karar olarak bırakarak bu projeyle başa çıkabileceğime yürekten inanıyorum.
RubberDuck

6
Ve sadece üzerinde bir isim koymak: Bu uygulamalar hepsi (belki ) önemli uygulamalar Çevik geliştirme (artışlı geliştirme, işe yarayabilir en basit şey, test odaklı, kullanıcı ilk ihtiyacı ...) içinde.
15'te sleske

8
Geri dönüp tekrar teşekkür etmek istedim. Tüm orta seviyem bir veritabanı olmadan çalışıyorum ve şimdi verinin nasıl sürdürüleceğini çok iyi anladım. Sana yeterince teşekkür edemem. Yapabilseydim tekrar oy kullanırdım.
RubberDuck

12
Tüm gereksinimleri ilk kod yönteminizle gerçekten yakalarsanız ve tüm bu gereksinimleri son veritabanınızda gerçekten ifade ederseniz , bu cevabı kabul edebilirim. Ancak, "işe yarar" olmanın memnuniyetinin, HORRIBLE veritabanı tasarımı olsa bile , kaçınılmaz ve ciddi performans sorunları olan " HORRIBLE veritabanı tasarımı " olsa bile, "işe yarayan bir veri tabanının yeterince iyi olması gerektiği" tutumuna yol açtığı pek çok proje gördüm. sonra. Ayrıca, birçok kişi, kodun veriyi doğrulayıp onaylamadığını kontrol etmenize gerek olmadığını, CHECK veya FOREIGN KEY sınırlamalarına ihtiyacınız olmadığını düşünüyor. Sen yap .
Ross Presser

2
Muhtemelen bu videoda ele alınmaktadır - maalesef şu anda buna ulaşamıyorum - fakat artan yaklaşımın bir diğer avantajı, doğru yapıldığında belirsiz özelliklerin katılaşmasına yardımcı olmasıdır. “Bu ekran ihtiyacınız olan tüm iletişim bilgilerini alıyor gibi görünüyor mu? Alanlar iş akışınıza uygun bir düzende düzenlenmiş mi?” Bu soruları sorabilmek - referans olarak somut bir şeyle - ihtiyacınız olan bilgiyi elde etmenin tek yolu IME'dir .
David,

17

Bir kök neden analizi, bu sorunun yöntemlerden biri olmadığını, ancak bir belirtimin bulunmadığını öne sürüyor. Bir olmadan ilk önce ne yazdığınızın önemi yoktur - yine de onu atacaksınız.

Kendinize bir iyilik yapın ve bazı temel sistem analizleri yapın - bazı kullanıcıları çeşitli düzeylerde tanımlayın, hızlı ve kirli bir anket yapın, ardından makinenizi kapatın, biraz kahve ve kurabiye / çörek alın (ya da tekerlekleri yağlayan her neyse) yürüyün. masalarını, ne yaptıklarını ve açık görünse bile işlerini yapmak için bilmeleri / kaydetmeleri gerekenleri sorun - hala sor. Ne kadar önemli oldukları konusunda endişelenmeyin, eğer çok meşgullerse, başka bir zaman geri gelmek veya onlarla bırakmak için bir düzenleme yapın.

Bunu yaptıktan sonra, size en iyi sonuçları vereceğini düşündüğünüz neyse onu oluşturmaya başlayabilmeli ve şartnamenin geri kalanını beklemelisiniz.


Ben yürekten katılıyorum, ama bu bu olmayacak. Yine de zaman ayırdığınız için teşekkürler.
RubberDuck

9
Doğru yapmak için zamanınız yoksa, bunu yapmak için zamanı nerede bulacaksınız?
Walter Mitty

@WalterMitty'yi doğru yapmamakla ilgili bir şey kim söyledi? Lütfen kabul edilen cevaptaki video bağlantısına bakınız. Veritabanı, yazılımın% 95'inden sapkınlığı çalıştırmak için yerinde olması gerekmeyen bir detaydır .
RubberDuck

1
Paydaşların sistemden hangi bilgilere ihtiyaç duyduğuna dair hiçbir ipucu olmadan bile kodlamaya devam edeceğiniz anlamına geldim. Bence James, analiz felcinde bozulmadan temel sistem analizi yapma konusunda size çok iyi tavsiyeler verdi.
Walter Mitty

Beni @WalterMitty’yi yanlış anladınız. Geri besleme döngüsü yaklaşımı aldım. Yapması gerektiğini düşündüğüm şeyi oluşturacağım (bir veritabanı olmadan) ve sonra onu kullanıcılara götüreceğim. Programı değiştirin. Tekrar et. Birkaç yinelemeden sonra, veritabanının nasıl görüneceğini tam olarak bilmeliyim. Anladığım kadarıyla Agile yaklaşımı, belirsiz şartlarla başa çıkmak için özel olarak tasarlanmıştır. Bu projede beni çok iyi görüyor.
RubberDuck

12

Benim deneyimim şu şekilde:

  • Çalıştığım çoğu projede önce veritabanını tasarladık.
  • Genellikle, elektronik tablolarda, eski veritabanlarında, kağıt vb. Veriler zaten mevcuttur. Bu veriler, tutmanız gereken tablolar hakkında ipuçları verir.
  • Çoğu zaman bir işlem zaten kullanılıyor, ancak manuel olarak veya otomatik olmayan, birlikte çalışmayan ve / veya standartlara uymayan birkaç ayrı araç kullanıyor.
  • Yarı olgun bir veritabanı modeline sahip olduğunuzda, bu veritabanını okuyan ve yazan prototip formları, pencereler vb. Tasarlamaya başlayabilirsiniz.
  • Siz devam ettikçe, başlangıçta düşünülmeyen şeylere uyum sağlamak için bazı değişiklikler yapılması gerekecektir.

Ayrıca unutmayın:

  • Artık bir tek uygulama <-> tek veritabanı dünyası değil. Belki de uygulamanız birden fazla veritabanından veri okumak veya yazmak zorunda kalacaktır veya çözümünüz aynı veritabanını kullanan birden fazla uygulamayı içerecektir.

Sonuç: İlk önce veri tabanını tasarlamanızı tavsiye ederim.


Bunların hepsi çok doğru şeylerdir ve aslında bu olacak bir "non-süreci" ve elektronik tabloyu değiştireceğiz, ama bu benim soruya bir cevap olduğunu görmek için başarısız. Lütfen açıklar mısın?
RubberDuck,

1
@RubberDuck Cevabımın sonunda bir açıklama ekledim.
Tulains Córdova

11

Veritabanını ilk olarak söyleyecektim çünkü büyük projelerle ilgili çok fazla tecrübem var ve paralel olarak çalışan birçok geliştiriciniz varsa gerçekten sağlam bir veri modeline ihtiyacınız var.

Ama sonra biraz daha fazla düşündüm ve daha başarılı olan büyük projelerde gerçekte yaptığımız şeyin "ilk şartlar" olduğunu anladım.

İyi tanımlanmış bir dizi iş gereksinimi, iyi bir dizi işlevsel gereksinime yol açar. İyi bir işlevsel gereksinimleriniz varsa, veri modeli ve modül özellikleri çok fazla çaba harcamadan yerine geçer.


Aynen böyle çalışırım. Önce ihtiyaçlar , evet. Keşke şimdi bazı katı gereklilikleri birisinin dışına çıkarabilsem.
RubberDuck

Gereksinimler önce, ancak gereksinimler tamamlanana kadar beklememelisiniz (asla olmazlar). Uygulamanın hedeflerinin ne olduğu hakkında bir fikriniz olduğunda bir kez başlayın, daha sonra ihtiyacınız olduğunda daha fazlasını elde edin.
15'te sleske

@sleske - İyi bir analist, gereksinimlerin daha "dinamik" (yani belirsiz ve değişken) bölümleri için bir fikir edinmeli ve kullanıcıların kaprisleriyle kolayca başa çıkmak için tasarıma biraz esneklik kazandırmalıdır.
James Anderson

1
@JamesAnderson: Aslında, daha sonra tasarımı değiştiremezseniz (nadiren durum) bilmediğiniz sürece, genellikle şu anda yalnızca ihtiyacınız olanı tasarladığınız çevik geliştirme ilkelerinin hayranıyım . Ama konu dışı
kalmaya başlıyorum

8

Bu çok akıcı / belirsiz göründüğü için ilk önce GUI'yi yapardım - bu, paydaşlardan yanıt, destek, zaman ve geri bildirim almanız için ihtiyacınız olana benziyor, değil mi? Mükemmel normalleştirilmiş masalarınız ve yabancı anahtar kısıtlamalarınız ve geçişli silmeleriniz umrunda değil. Ama çok parlak renkler ile serin bir GUI - işte en üst seviye!

İlk arka uç "veritabanı" için son derece basit bir şey kullanın, belki de sadece bir dosyaya kaydedilmiş anahtarlar / değerler. MS Access'e aşina değilim, bu yüzden "en hafif" arka uç ne olacağını bilmiyorum. (Bir hesap makinesi tablosu?) Hızlı ve kirli ne varsa, onu atmayı planlayın.

Yapabiliyorsanız, bir prototip olduğunu açıkça belirtmek için GUI'de komik bir görünüm kullanın . Hepsi başarısız olursa, dizin kartlarını kullanın.

Şimdi, belki de paydaşlarınız DB uzmanlarıdır - bu bazen bende böyle oldu! - bu durumda, bazı DB tasarımları yapın.


3
"İlk önce kod" veya "ilk önce veritabanı" için değil + "ilk önce işlevsel olmayan gui-prototip" (aka "hızlı prototipleme") için +1;
k3b

1
Doğru, ancak aynı zamanda uygulamanın olduğu kadar iyi olduğuna inanmalarını sağlar. Daha önce de bu şekilde
yakıldım

@Mawg evet, ne yazık ki bu bir tehlikedir. Bir seçenek (en azından Java'da), bunun bir prototip olduğunu açıkça belirtmek için garip bir "görünüm ve his" kullanmaktır.
user949300

Nereye gittiğinizi bilmiyorsanız, herhangi bir kod sizi oraya götürür.

-1

Gereksinimler açık olmadığı için, ihtiyaç duyacağınız temel unsurlar ile çok basit bir veri modeliyle başlayabilirsiniz, belki sadece temel tabloları ve PK'ları başlatmak için. Verilerin geri kalanı, ikili ya da XML ile seri hale gelir ve BLOB ile başlamak üzere veritabanında depolanır. Bu, tamamen ilişkisel bir model olmadan kullanıcı arayüzünü ve işletme katmanını (orta seviye) geliştirmeye izin vermelidir, ancak gerektiğinde kaydetme ve alma ve basit anahtar aramaları yapmaya devam edemezsiniz.

Örnek olarak, belki bir kişiliğiniz vardır, bu yüzden bir kimliğe sahip bir kimliğiniz vardır. Özniteliklerin geri kalanı bilinmemektedir, bu yüzden sadece PK Kişi Kimliği olan bir Kişi tablosu ve tüm kişi verilerini içeren Blob'u depolayacak başka bir sütunla başlayın.

Gereksinimler katılaşınca, Blobs'unuzu alın ve gereken tüm tabloları ve sütunları çıkartın ve modeli ilişkisel hale getirin. Öyleyse, bir BLOB'dan veri erişim katmanındaki ilişkisel seviyeye olan direncin değiştirilmesi meselesi. Ancak diğer her şey, işletme kuralları kullanıcı arayüzü vb. Not, bu projeye biraz zaman kazandırır, ancak işler daha sıkı hale gelinceye kadar ilişkisel modeli değiştirmeden gerekenleri eklemek ve bırakmak için tam bir esneklik sağlar.

Bir BLOB'u sorgulayamadığınız için arama gecikebilir, böylece model stabilize olur, aranması gereken verileri ilişkisel sütunlarda depolamaya başlayın.

Temel olarak tablo modeliyle başlar ve proje ilerledikçe ilişkisel bir modele geçersiniz.

Veya, herhangi bir işe başlamadan önce gereklilikleri yerine getirin, böylece başlangıçta ilişkisel bir model geliştirilebilir.


Bu şekilde delilik yatıyor. Verileri sürdürmeye hazır olana kadar hiçbir zaman verileri sürdürmeyin. Verileri gerçeğe sonra normalleştirmek bir kabus.
RubberDuck

1
Kalıcılık ve normalleşme arasında bir fark var. Sadece sizin cevaplayabileceğiniz soru, sadece devam etmem veya devam etmem ve normalleşmem gerekiyor mu? Bir veri modeli, gereklilik yoksa, bir şeyi ilişkisel olarak modellemenin zorluğudur.
Jon Raynor

-2

Genel olarak kod veriden sonra gelir çünkü kod veriyi değiştirir.

Gereksinimler net değilse, gereksinimleri yorumlamanızın bir veri modelini oluşturabilirsiniz. En iyisi, belki bazı gereklilikleri yazıp işvereninize göndermektir, daha sonra ateş edecekleri bir şey vardır. Ya da önce bir gui oluşturun, bu en iyi işveren türüne bağlıdır :)


3
bu, önceki 5
cevapta

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.