Deneyimli programcılar veritabanı sorgularını bilmeli mi? [kapalı]


35

Sorgu yazma ve veritabanı tasarımı konusunda da uzman olan pek çok programcı var.

Bu uzman bir programcı veya yazılım mühendisi olmak için temel bir gereklilik midir?

Orada benzerlikler bir sürü yolu sorgular ve kodlar geliştirilmektedir rağmen, benim kişisel görüşüm, Sorgular farklı var gibi Yapısını daha Kanunu'na ve bunun nedeni farklı yaklaşımlar, eşzamanlı olarak Usta zor olabilir.


2
"Yapı" ile neyi kastediyorsunuz? Eğer anlambilim hakkında konuşuyorsanız, herhangi bir yeni anlambilimi kavramak bir " uzman " için sorun olmamalıdır . Tanım olarak. OTOH, sadece birkaç geliştirici veritabanlarına ve sorgulama dillerine maruz kalıyor, geri kalanımız hiç umrunda değil.
SK-mantık

3
Bunun hatalı bir varsayım olduğunu düşünüyorum: "Orada ayrıca Query yazma ve Veritabanı tasarımı konusunda da uzman olan birçok programcı var." Bu konularda uzman olan nispeten az sayıda programcı var: DBA! = SE.
Ashley,

1
Veri tabanı sorguları yazmak gerçekten zor mu?
Kaptan Duygulu

@ CaptainShakespeare, gerçekten CRUD işlemlerini geçtikten sonra oldukça zor olabilir. Ty bazen karmaşık raporlar yapıyor. Sonra performans ayarlama sorgularına bakın.
HLGEM

Yanıtlar:


69

Veri tabanı sorgu yazısının temel bir gereklilik olması gerekip gerekmediği, işe bağlıdır, ancak ilişkisel veritabanları mevcut teknolojide her yerde bulunur.

Dolayısıyla, veritabanı sorguları yazmayı bilmeyen bir programcıyla tanışsaydım iki şeyden birini beklerdim:

  1. Genellikle deneyimsizdirler.
  2. Başka bir alanda (örn. Gömülü sistemler) oldukça uzmandırlar ve bunu öğrenmek için hiçbir zaman ihtiyaçları olmadı.

Veritabanı sorguları temel olarak daha standart programlama dillerinden farklıdır. Cebirseldir ve ilişkisel veriler üzerinde çalışmayı amaçlarlar, C # veya Java zorunludur ve disklerde, bellekte, kullanıcı girişinde vb. Çalışır. LISP veya Haskell gibi işlevsel diller bile daha fazla ilişkisel verilere yöneliktir.

DÜZENLEME: Benim ve başkalarının yorumlarında belirtildiği gibi, deneyimli bir geliştiricinin veritabanı sorgularını iyi bilmemesinin bazı geçerli nedenleri vardır:

  • Takımları ORM / NoSQL kullandılar
  • Takımlarının DB programcıları vardı
  • Uygulamanın karmaşıklığı iş mantığındaydı ve DB sorguları önemsizdi
  • Ekipleri, bazı programcıların sorgu yazmadığı şekilde çalışmayı paylaştı.

Geçerli olsa da, bu uyarılar deneyimli bir geliştiricinin veritabanı sorgularını bilmemesi için ikna edici nedenler değildir. Yüksek düzeyde uzmanlaşmadıkça, bir programcının ilişkisel veritabanlarına aşina olması gerekir.

Özetle, çoğu deneyimli geliştirici veritabanı sorgularını bilmelidir .


1
Yani, eğer birisi Veritabanı kullanan önemsiz bir proje yaptıysa, sorgularla tanışması beklenir, değil mi?
Shamim Hafiz

3
@Shamim, bu kişi ortaokul veya giriş seviyesi olmadığı sürece bu kişinin sorgularla orta derecede deneyimlenmesini beklerdim. Belki de bu kişi yalnızca birkaç yıllık bir deneyime sahiptir ve oldukça uzman bir ekibe sığındı?
maple_shaft

12
@Shamim Muhtemelen beklerdim. Hala olabilir iyi bir programcı olmak. Bunun gibi soruları cevaplamak çok zordur, çünkü çok fazla uyarıdır: belki de ekibin bir DB programcısı vardı; belki de uygulamanın benzersizliği iş mantığındaydı ve veritabanı sorgulamaları önemsizdi; belki de çalışmayı paylaştı, programlayıcınız sorular üzerinde çalışmayacaktı; vb.
Matthew Rodatus

4
Geliştirme ekibim, projenin bir parçası olarak PL / SQL programcılarını görevlendirdi. Böylece .Net programcıları basit sorgular yapabiliyorlarsa onu incelemek ve daha karmaşık sorgular geliştirmek için oradalar. Üstelik, ORM'nin (ve NOSQL) çoğalmasıyla birlikte, neden SQL olmayan geliştiricilerin karmaşık sorgular bilmesi gerektiğini düşünüyorsunuz.
softveda

2
@Matthew Rodatus: Sorguları yöneten kütüphanelerin olduğu yerlerde çalıştım, bu yüzden basit SQL'i anlamadan orada çalışmak teorik olarak mümkün olacaktı. Uygulamadaki tüm geliştiricilerin uzman olduğuna inanıyorum.
David Thornley

23

Herhangi bir yazılım mühendisi, en azından bunun ne için kullanılabileceğini (ve bununla birlikte anahtar, görüş anlayışı içerecektir. , saklı yordamlar ve tetikleyiciler).

Her yazılım mühendisinin bir uzman olması gerekmez ve gereken uzmanlık düzeyi gerçekten odaklandıkları yazılımın türüne bağlıdır. Gömülü yazılım, donanım sürücüleri ve işletim sistemleri nadiren SQL kullanır, ancak uygulama yazılımı (web veya masaüstü veya servis / arka plan tabanlı) her zaman veritabanları kullanır.


1
Neyse ki, bugünlerde herhangi bir RDBMS olmadan uygulama yapmak tamamen uygun. Çoğu görev onlara ihtiyaç duymaz veya ilişkisel bir modelle uygun şekilde eşleştirilemez. Mevcut ilişkisel olmayan depolama seçenekleri ton vardır.
SK-mantık

8
Bu benim düşüncemi de özetliyor. Uzman? Hayır. Bilgi? Evet.
Wayne Molina

2
@ SK-mantık, ilişkisel veritabanlarını ne gibi seçeneklerin ilgisizleştirdiğini düşünüyorsunuz? Datawarehousing, analitik bir işlem sisteminde kullanılamayacak kadar uzmanlaşmıştır. Ve beni OODBMS ile ilgili yanlış olan her şeye başlatmayın.
maple_shaft

1
@maple_shaft, çok sayıda özel, etki alanı yönelimli depolama çözümü var. RDBMS'ler genel olmaya çalışır ve bunda kötü bir şekilde başarısız olur. Bazı durumlarda bile eski hiyerarşik DBMS'ler ilişkiselden çok daha iyidir.
SK-mantık

6
Tüm masaüstü yazılımı veritabanları kullanmaz, bu yüzden her zaman olacağını söylerken dikkatli olun.
Adam Lear

18

Veri tabanı bilgisine ihtiyaç duyulmayan bazı uzmanlık alanları (örneğin gömülü sistemler) vardır. Ancak çoğu iş uygulaması bir tür veritabanı kullanır ve nasıl düzgün kullanılacağını tam olarak anlamadıysanız, düzeltilmesi oldukça zor olan bir performans karmaşası oluşturabilirsiniz. Yeniden veritabanlarını yeniden yapılandırmak karmaşık ve zor bir işlem olabilir ve birçok yerde bu zorluk nedeniyle yapısal sorunları çözmemeyi ve kendilerini daha derin bir çukurun içine kazmayı tercih eder. Veri tabanı bilgisine sahipseniz, tasarım çok daha kolay ve zaman içinde iyi çalışması çok daha olasıdır.

ORM'ler veritabanı bilgisini almanın yerine geçmez. Veri tabanı sorgulamanın ve tasarımın temellerini bilmeden birisini kullanan herkes, uygulamanızın yükü idare etmesinin uzun menzilli yeterliliğini etkileyecek kötü performans gösteren, kötü tasarlanmış bir veritabanına mahkumdur. Ne yaptığını bilen birinin elindeki ORM'ler iyidir; veritabanları hakkında bilgi sahibi olmak için rahatsız olmayan insanların elinde genellikle bir felakettir.

Veritabanı arka uçlu bir projem olsaydı, veritabanı uzmanı işe alacağım ikinci geliştirici olurdu (intial uygulama geliştiriciden sonra). Veritabanları genellikle atılmaz, bu veriler 20 yıl sonra aynı forma yakın bir şekilde orada kalacaktır, başlangıç ​​aşamalarında uzmanlığa sahip olmak öder.

Projeler sık ​​sık sorun yaşar, çünkü veritabanı 100.000.000 kayda sahip olana ve yavaş çalışana kadar bu insanları işe almazlar. Veya aracı hatalı oldukları için suçlarlar (doğru tasarlarsanız SQL Server yavaş değildir) tasarım yetersizlikleri değildir.


4
Bir ORM'nin varlığının SQL (veya ne tür bir db kullanıyorsanız kullanmakta olduğunuz faktörlerin altında yatan) bilme ihtiyacının yerini almadığını belirtmek için +1.
RHSeeger

4
+1 ve keşke size 100 tane daha verebilseydim! Bu korelasyonun! = Nedensellik olduğunu biliyorum, fakat EVER ile birlikte çalıştığım en etkili uygulama geliştiricilerin standart bir SELECT sorgusu yazmanın tam bir anlayışı olduğunu bana açıkça gösteriyor. İyi bir geliştiriciye bir veri modeli ve verilerle ilgili bir "soru" verebilmeliyim ve o kişi sonunda sorumu "cevaplayan" bir sorgu yazabilmelidir.
maple_shaft

1
+1, tamamen katılıyorum. 'ORM kullanıyoruz' veya 'bunun için özel programlayıcılarımız var' açıklamasını almıyorum. Birisi gerçekten deneyimli ise , bir noktada db geliştirici rolünü doldurmuş olacaktı. Tecrübe budur.
GrandmasterB

15

Politik olarak doğru cevap: Bu değişir. Eğer geliştirici hiçbir zaman ilişkisel veritabanlarıyla çalışmazsa (ve bu gün ve NoSQL uygulamalarının yaşında, aslında oldukça muhtemeldir), SQL bilgisinin hiçbir değeri yoktur.

İkincisi, bir DBA veya tam zamanlı bir sorgu yazıcısı (unvanı ne olursa olsun) olduğunda, o zaman anlamak da daha az önemlidir.

Geliştiricinin her şeyi gerçekleştiren bir esnaf olması gerekiyorsa ve projelerinde ilişkisel bir veritabanı kullanma zorunluluğu varsa (örneğin eski moda web uygulamalarında veya mevcut veritabanlarıyla bağlantı kurma), bu gerçekten çok önemlidir.

Kişisel görüşüm: Hayır. Deneyimli bir yazılım geliştirici, 'varsayılan olarak' değil, gerektiğinde ve gerektiğinde yeni bir beceri (SQL gibi) öğrenebilmelidir. Esneklik ve öğrenme ve anlama yeteneği, yani, iyi bir geliştiriciyi tamamdan farklı kılan şeydir. 'Altın çekiç' kuralı da geçerlidir - eğer kapsamlı SQL bilgisine sahip bir geliştiriciniz varsa, bu geliştiricinin en iyi bildiği aracı - ilişkisel veritabanları - her problemi çözmeyi denemek için mutlaka kullanması muhtemeldir. en iyi çözüm olmak. Tabii ki, bu aynı zamanda NoSQL savunucuları için de geçerlidir;;).

Doğru iş için doğru aracı seçmek, deneyimli bir programcının bilmesi gereken şeydir.


NoSQL veritabanları, ilişkisel veritabanlarından daha fazla veya daha hızlı işlemez. Bunu nereden duyduğunu bilmiyorum, ama bu açıkça, tehlikeli bir şekilde yanlış.
Aarona

@Aaronaught - Yaptım, erken varsayımın destekçisi olduğum için teşekkürler, :).
Cthulhu

7

Bilgisayar Programcılığına bu wikipedia girişini inceleyin:

Bilgisayar programlama (genellikle programlama veya kodlamaya kısaltılır), bilgisayar programlarının kaynak kodunu tasarlama, yazma, test etme, hata ayıklama / sorun giderme ve bakım işlemidir. Bu kaynak kodu bir programlama dilinde yazılmıştır. Programlamanın amacı, istenen belirli bir davranışı sergileyen bir program oluşturmaktır.

Veri tabanı sorgularının kendi dilleri vardır, tasarlanabilir, test edilebilir, tahrif edilebilir ve yönetilebilir. Bir veritabanı sorgusunun amacı, ihtiyacınız olan bilgiyi, ihtiyaç duyduğunuz şekilde edinmenizi sağlamaktır.

Bu yüzden kesinlikle programlama olduğunu düşünüyorum.


7

Kurumsal ve ticari uygulamalarda geçmişi olan iyi bir yazılım mühendisi (EDIT: özellikle bir RDBMS kullanan projelerde) ilişkisel veritabanı sorgularını standart biçimde yazma konusunda uzman bilgisine sahip olmalıdır. Ayrıca, karmaşık şemaları anlayabilmeli ve en azından orta derecede karmaşıklıkta şema tasarımları önerebilmelidirler.

Son derece gelişmiş veya karmaşık şema tasarımı, bir veri modelleyicisinin veya işlevsel bir mimara aittir.

Bu, Veritabanı Programcılarının da bir yeri olmadığı anlamına gelmez. Karmaşık depolanmış prosedürler, karmaşık ve verimli sorgular ve tek bir veritabanı satıcısının (örn. Oracle, MySQL, SQLServer, vb.) Benzersiz araçlara ve tekliflere odaklanan veritabanı katmanlı yazılım tasarımı ve mimarisi, profesyonel yazılımlara mümkün olduğunda en iyi şekilde bırakılmalıdır. Bu oldukça özel ve karmaşık tekliflerle ilgili deneyime sahip mühendisler.

Bununla birlikte, işletme ve işletme sistemlerinin büyük çoğunluğu bence veri modelleyicileri ve uzman veritabanı programcılarına olan ihtiyacı haklı çıkarmıyor, ancak daha önce bu insanların masaya getirdiği bilgi ve uzmanlıktan BÜYÜK fayda sağladı.


2
-1: "iyi" bir yazılım mühendisinin ilişkisel veri tabanı sorgulamalarında uzman olması gerektiğine kesinlikle katılmıyorum .
John Saunders

3
İyi bir ENTERPRISE veya BUSINESS uygulama yazılımı mühendisi (gömülü sistemler, vs. ...) olduğunu söylersem ve bu kişinin STANDARD ilişkisel veritabanı sorgularında uzman olması gerektiğini söylesem (fantezi-pantolon satıcısı olmadan) hala aynı fikirde misiniz? analitik sorgular ve benzeri gibi özellikler) SQL SELECT ifadeleri, her türlü birleşme, birleşme, kesişme ve birleştirme, satır içi görünümler, koşullar, sıralama ve gruplama sonuç kümelerinin kapsamlı bir şekilde anlaşılması, yukarıda belirttiğim etiketleri taşıyan HERHANGİ bir yazılım mühendisi tarafından tam olarak anlaşılmalı ve gösterilmelidir.
maple_shaft

4
Meh. Büyük bir yazılım şirketinde çalışıyorum ve herhangi bir RDBMS ile ilgilenmiyoruz. Masaüstü yazılım geliştiren son işim de SQL gerektirmiyordu. Kurumsal uygulamaları ve iş uygulamalarını nasıl tanımladığınızdan emin değilim, ancak bana göre bu konudaki görüşleriniz biraz dar.
Adam Lear

2
Söylediklerimin yanındayım. Teorik olarak, uygulama iyi bir şekilde katmanlandırılmış ve iyi bir şekilde bileşenlenmiş olsaydı, o zaman tüm mesleki deneyimime ihtiyaç duymazdım, ekibim ve RDBMS tasarım ve geliştirme için özel bir ekibimiz olsa bile, SQL'de uzman olmasaydık DROWNED olurdu. Belki de eski modayım ya da kariyerimde sadece şansım yaver gitti?
maple_shaft

3
@maple_shaft Evet, üzerinde çalıştığım uygulamaların yeterince bileşenlendirilmiş olması değil. Bu, herhangi bir RDBMS kullanmadılar, dönem. Farklı alanlar sanırım. Mesele şu ki, her işletme / işletme geliştiricisinin SQL'de iyi olması gerektiğini söyleyemezsiniz . Bu sadece doğru değil. Kullanırsanız, iyi olun. Başka bir dilde veya teknolojide olduğu gibi, ihtiyaç duymadığınız sürece endişelenmeyin.
Adam Lear

6

Diğerleri veritabanı sorgularıyla ilgili sorunuzu çoktan cevapladılar.

Veritabanı tasarımı, belirli bir tasarım türüdür. Öğrenmesi o kadar zor değil, ancak tipik veritabanı tasarımcısı bir veritabanı tasarlamak için pek fazla fırsat bulamıyor.

Çalıştığım yer, 1970’de olduğu gibi aynı veritabanı tasarımına sahip. Veritabanını IDMS’den DB2’ye taşıdık, ancak aynı ağ veritabanı tasarımı. Burada çalıştığım 9 yılda 5 yeni DB2 tablosu oluşturma fırsatım oldu.

Özel bir veritabanı tasarımcısına sahip çok az iş yeri bulunduğundan şüpheleniyorum. Bu nedenle, veritabanı tasarımının kıdemli bir analistin repertuarının bir parçası olarak kabul edildiği sonucuna vardım.


5

Açıkçası, çoğumuzun her gelişmenin bir veritabanı etrafında döndüğünü düşündüğümüzü ve bunun üzerine bir SQL veritabanını gördüğümüzü hayret ediyorum.

Diğerleri, veritabanlarımızla (dolaylı olarak) çalışıyor olsak bile, işlerimizde SQL'in nitrit boşluğundan sakınabileceğimiz birçok yoldan bahsetti, ancak 101 elektrik ürününün donanımını yazan tüm geliştiriciler ne? sahip? Peki ya gerçek zamanlı izlemede uzmanlaşmış adamlar?

Bugünün geliştiricilerinin çoğunun, değişen derecelerde SQL becerilerine sahip olacağını, ancak yeteneklerinin bir barometresi olmaktan çok uzak olduğunu söyleyebilirim.


5

Veritabanlarının yazılımdaki önemini abarttığınızı düşünüyorum.

Birçok uygulama sınıfı veritabanı merkezli değildir.

Şimdi kelime işlemcilerde ve görüntü düzenleyicilerinde bir DBMS'ye ihtiyacımız var mı? Peki ya konuşma tanıma ve bilgisayarlı görü sistemleri çok fazla veritabanı sorgusu içeriyor?

Peki ya lineer video editörleri ve video oyunu fizik motorları?


5

Bir general geliştiriciden en azından veritabanı teknolojileri (ilişkisel veya başka türlü) farkındalığına sahip olmalarını ve bunları kullanmanın artılarını ve eksilerini tartışmayı beklerdim . Aksi takdirde, nasıl yapılacağını bildikleri tek şey veriyi düz dosyalara doldurmaktan korkarım.


4

Sorgu yazmanın programcılar için temel bir gereklilik olduğunu düşünmüyorum. Bunu söyleyerek, sorgu yazabilen ve veritabanları tasarlayan bir programcının bir kurum için daha değerli olacağına inanıyorum.

Ancak, eğer bu programcı sadece "tblxxxx'den" select * komutunu yaz "tipinde sorular yazabiliyorsa, bu programcının bir uzman olduğunu düşünmezdim. Aynı şekilde, bu programcı tarafından tasarlanan veri tabanı ikiden çok-çok ilişkiyi iki tablo yerine bir tabloya yerleştirirse, o zaman bu programcının bir uzman olduğunu düşünmezdim.

İşte bunu BT dışı insanlara nasıl açıklayacağım. BT uzmanları, marangozların, elektrikçilerin ve tesisatçıların saygı duyulan alanlarda uzmanlaşmalarına benzer bazı alanlarda uzmanlaşmıştır. Bazı becerilerle üst üste gelme eğilimindedirler ancak her alanda uzman değildirler. Bir elektrikçi basit marangozluk işlerini güvenle yapabilir, ancak karmaşık yapıların üstesinden gelmeye çalışırken iyi düşünmez.

Aynı şekilde, bir programcı basit sorguları ve veritabanı tasarımlarını nasıl yazacağını veya değiştirebileceğini bilmeli ve bilmelidir ancak karmaşık bir veri yapısı tasarlaması beklenemez.


3

Bölümümüzde etrafa bakmak, buna bağlı olarak:

  • Bizim masaüstü / web / sunucu geliştiriciler . En azından uzmanlık alanlarına bağlı olarak basit ve ileri düzeyde crud ifadeleri yazmaları gerekir. Optimizasyon için birkaç uzman DB yöneticimiz var.
  • Bizim gömülü programcılar . Çok az kişi "mytable from select" 'i asla geçemedi. Ancak, bu son birkaç ayda sqllite projelerine dahil edildi.
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.