Sollten erfahrene Programmierer Datenbankabfragen kennen? [geschlossen]

35

Es gibt so viele Programmierer, die auch ein Experte für das Schreiben von Abfragen und das Entwerfen von Datenbanken sind.

Sollte dies eine Grundvoraussetzung sein, um ein erfahrener Programmierer oder Softwareentwickler zu sein?

Obwohl es viele Ähnlichkeiten in der Art und Weise gibt, wie Abfragen und Codes entwickelt werden, scheint meine persönliche Meinung zu sein, dass Abfragen eine andere Struktur als Code haben und es aufgrund der unterschiedlichen Ansätze schwierig sein kann, beide gleichzeitig zu meistern.

Shamim Hafiz
quelle
2
Was meinst du mit "Struktur"? Wenn Sie über Semantik sprechen, sollte es für einen " Experten " kein Problem sein, eine neue Semantik zu erfassen . Per Definition. OTOH, nur wenige Entwickler sind Datenbanken und Abfragesprachen ausgesetzt, der Rest von uns kümmert sich überhaupt nicht darum.
SK-logic
3
Ich halte dies für eine falsche Annahme: "Es gibt so viele Programmierer, die auch ein Experte für das Schreiben von Abfragen und das Entwerfen von Datenbanken sind." Es gibt relativ wenige Programmierer, die mit diesen Dingen vertraut sind: DBA! = SE.
Ashley
1
Wie schwierig ist es wirklich, Datenbankabfragen zu schreiben?
Captain Sensible
@CaptainShakespeare, wirklich kann es ziemlich schwierig werden, wenn Sie an CRUD-Operationen vorbeikommen. Irgendwann macht Ty komplexe Berichte. Schauen Sie sich dann die Abfragen zur Leistungsoptimierung an.
HLGEM

Antworten:

69

Ob das Schreiben von Datenbankabfragen eine Kernanforderung sein sollte oder nicht, hängt vom Job ab, aber relationale Datenbanken sind in der aktuellen Technologie allgegenwärtig.

Wenn ich also einen Programmierer treffen würde, der nicht weiß, wie man Datenbankabfragen schreibt, würde ich eines von zwei Dingen erwarten:

  1. Sie sind in der Regel unerfahren.
  2. Sie sind hochspezialisiert auf einem anderen Gebiet (zB eingebettete Systeme) und mussten es nie lernen.

Datenbankabfragen unterscheiden sich grundlegend von Standardprogrammiersprachen. Sie sind algebraisch und für relationale Daten gedacht, während C # oder Java unbedingt erforderlich sind und für Festplatten, Speicher, Benutzereingaben usw. gelten.

EDIT: Wie in den Kommentaren von mir und anderen erwähnt, gibt es einige triftige Gründe, warum ein erfahrener Entwickler Datenbankabfragen möglicherweise nicht gut kennt:

  • Ihr Team verwendete ORM / NoSQL
  • Ihr Team hatte DB-Programmierer
  • Die Komplexität der Anwendung lag in der Geschäftslogik, und die DB-Abfragen waren trivial
  • Ihr Team hat die Arbeit so aufgeteilt, dass einige Programmierer keine Abfragen geschrieben haben

Obwohl gültig, sind diese Vorbehalte keine überzeugenden Gründe, warum ein erfahrener Entwickler Datenbankabfragen nicht kennt. Ein Programmierer sollte mit relationalen Datenbanken vertraut sein, es sei denn, er ist hoch spezialisiert.

Zusammenfassend sollten die meisten erfahrenen Entwickler Datenbankabfragen kennen .

Matthew Rodatus
quelle
1
Wenn also jemand ein nicht triviales Projekt gemacht hat, das Database verwendet, wird von ihm erwartet, dass er mit Fragen vertraut ist, oder?
Shamim Hafiz
3
@Shamim, ich würde erwarten, dass diese Person mäßig Erfahrung mit Fragen hat, es sei denn, diese Person war Junior oder Einsteiger. Vielleicht hat diese Person nur ein paar Jahre Erfahrung und war in einem hochspezialisierten Team untergebracht?
maple_shaft
12
@Shamim würde ich wohl so erwarten. Sie könnten immer noch ein guter Programmierer sein. Fragen wie diese sind sehr schwer zu beantworten, weil sie so viele Vorbehalte enthalten: Vielleicht hatte das Team einen DB-Programmierer; Vielleicht lag die Nicht-Trivalität der Anwendung in der Geschäftslogik, und die Datenbankabfragen waren trivial. Vielleicht haben sie die Arbeit so aufgeteilt, dass Ihr Programmierer nicht an den Abfragen gearbeitet hat. etc.
Matthew Rodatus
4
Mein Entwicklungsteam hat engagierte PL / SQL-Programmierer als Teil des Projekts. Während die .Net-Programmierer also einfache Abfragen ausführen können, sind sie dort, um diese zu überprüfen und die komplexeren Abfragen zu entwickeln. Darüber hinaus, mit der Verbreitung von ORM (und NOSQL), warum müssen Ihrer Meinung nach Nicht-SQL-Entwickler komplexe Abfragen kennen.
Softveda
2
@Matthew Rodatus: Ich habe an Orten mit Bibliotheken gearbeitet, in denen Abfragen verwaltet wurden, daher wäre es theoretisch möglich, dort zu arbeiten, ohne einfaches SQL zu verstehen. Ich glaube, dass alle Entwickler in der Praxis kompetent waren.
David Thornley
23

Jeder Softwareentwickler sollte ein grundlegendes Verständnis für Datenbanken und das Speichern und Abrufen von Daten mit SQL haben, zumindest so weit, dass er versteht, wofür dies verwendet werden kann (und damit würde ich ein Verständnis für Schlüssel und Ansichten einschließen , gespeicherte Prozeduren und Trigger).

Nicht jeder Softwareentwickler muss ein Experte sein, und das erforderliche Fachwissen hängt wirklich von der Art der Software ab, auf die er sich konzentriert. Eingebettete Software, Hardwaretreiber und Betriebssysteme verwenden selten SQL, aber Anwendungssoftware (Web, Desktop oder Service / Daemon) verwendet ständig Datenbanken.

wolfgangsz
quelle
1
Glücklicherweise ist es heutzutage völlig in Ordnung, Anwendungen überhaupt ohne RDBMS durchzuführen. Die meisten Aufgaben benötigen sie nicht oder können einem relationalen Modell einfach nicht angemessen zugeordnet werden. Es stehen unzählige nicht relationale Speicheroptionen zur Verfügung.
SK-logic
8
Das fasst auch meine Meinung zusammen. Experte? Keine Kenntnis? Ja.
Wayne Molina
2
@ SK-logic, Welche Arten von Optionen erachten Sie als irrelevant für relationale Datenbanken? Datawarehousing ist zu spezialisiert, als dass die Analyse in einem Transaktionssystem nützlich wäre. Und lassen Sie mich nicht alles falsch mit OODBMS anfangen.
maple_shaft
1
@maple_shaft, es gibt zahlreiche spezialisierte, domänenorientierte Speicherlösungen. RDBMSes versucht, generisch zu sein, und schlägt dabei fehl. In einigen Fällen sind sogar alte hierachische DBMS viel besser als relationale.
SK-logic
6
Nicht jede Desktop-Software verwendet Datenbanken. Seien Sie also vorsichtig, wenn Sie sagen, dass dies immer geschieht.
Adam Lear
18

In einigen Fachgebieten (zum Beispiel eingebettete Systeme) sind keine Datenbankkenntnisse erforderlich. Bei den meisten Geschäftsanwendungen wird jedoch eine Datenbank verwendet. Wenn Sie die ordnungsgemäße Verwendung dieser Datenbank nicht genau kennen, können Sie eine Leistungsstörung verursachen, die nur schwer zu beheben ist. Das Umgestalten von Datenbanken kann ein komplexer und schwieriger Prozess sein, und viele Unternehmen entscheiden sich aufgrund dieser Schwierigkeit dafür, die strukturellen Probleme nicht zu beheben und sich nur tiefer in ein Loch zu graben. Wenn Sie über Datenbankkenntnisse verfügen, ist das Entwerfen viel einfacher und funktioniert mit der Zeit mit größerer Wahrscheinlichkeit.

ORMs sind kein Ersatz für Datenbankkenntnisse. Jeder, der eine Datenbank verwendet, ohne die Grundlagen der Datenbankabfrage und des Datenbankentwurfs zu kennen, ist dazu verdammt, eine schlecht funktionierende, schlecht entworfene Datenbank zu haben, die die Fähigkeit Ihrer Anwendung zur Bewältigung der Last auf lange Sicht beeinträchtigt. ORMs in den Händen von jemandem, der weiß, was er oder sie tut, sind in Ordnung; In den Händen von Leuten, die sich nicht die Mühe machen, etwas über Datenbanken zu lernen, sind sie normalerweise eine Katastrophe.

Wenn ich ein Projekt mit einem Datenbank-Backend hätte, wäre der Datenbankspezialist der zweite Entwickler, den ich einstellen würde (nach dem ersten Anwendungsentwickler). Datenbanken sind in der Regel kein Ausweg, da Daten auch nach 20 Jahren noch in etwa der gleichen Form vorliegen. Fachwissen in der Anfangsphase lohnt sich.

Projekte geraten häufig in Schwierigkeiten, weil sie diese Personen erst einstellen, wenn die Datenbank 100.000.000 Datensätze enthält und langsam ausgeführt wird. Oder sie beschuldigen das Tool, schlecht zu sein (kein SQL Server ist nicht langsam, wenn Sie richtig entwerfen), nicht ihre Entwurfsinkompetenz.

HLGEM
quelle
4
+1 für die Erwähnung, dass das Vorhandensein eines ORM nicht die Notwendigkeit ersetzt, SQL zu kennen (oder die zugrunde liegenden Faktoren für den von Ihnen verwendeten DB-Typ).
RHSeeger
4
+1 und ich wünschte, ich könnte dir 100 mehr geben! Ich weiß, dass Corellation! = Kausalität ist, aber es ist mir mehr als klar, dass die effektivsten Anwendungsentwickler, mit denen ich je gearbeitet habe, ein gründliches Verständnis für das Schreiben einer Standard-SELECT-Abfrage hatten. Ich sollte in der Lage sein, einem guten Entwickler ein Datenmodell und eine "Frage" zu den Daten zu übergeben, und diese Person sollte schließlich in der Lage sein, eine Abfrage zu schreiben, die meine Frage "beantwortet".
maple_shaft
1
+1, stimme vollkommen zu. Ich kaufe nicht die Erklärung, dass wir ORM verwenden oder dass wir dafür engagierte Programmierer haben. Wenn jemand wirklich erfahren ist , hätte er an einem Punkt die Rolle des Datenbankentwicklers übernommen. Das ist, was Erfahrung ist.
GroßmeisterB
15

Die politisch korrekte Antwort: Es kommt darauf an. SQL-Kenntnisse haben überhaupt keinen Wert, wenn der Entwickler nie mit relationalen Datenbanken arbeitet (und in der heutigen Zeit von NoSQL-Anwendungen ist dies sehr wahrscheinlich).

Zweitens, wenn es einen DBA oder einen Vollzeitschreiber für Abfragen gibt (unabhängig vom Titel), ist das Verständnis ebenfalls von geringerer Bedeutung.

Es ist nur dann wirklich wichtig, wenn der Entwickler ein Alleskönner sein muss und in seinen Projekten die Verwendung einer relationalen Datenbank erforderlich ist (z. B. in altmodischen Webanwendungen oder beim Verbinden mit vorhandenen Datenbanken).

Meine persönliche Meinung: Nein. Ein erfahrener Softwareentwickler sollte in der Lage sein, eine neue Fähigkeit (z. B. SQL) zu erlernen, wenn und wann dies erforderlich ist, und nicht standardmäßig. Flexibilität und die Fähigkeit zu lernen und zu verstehen ist es, was einen guten Entwickler von einem guten unterscheidet. Die "Golden Hammer" -Regel gilt auch - wenn Sie einen Entwickler mit umfangreichen SQL-Kenntnissen haben, wird dieser Entwickler höchstwahrscheinlich das Tool herausholen, das er am besten kennt - relationale Datenbanken -, um zu versuchen, jedes Problem zu lösen, obwohl dies nicht unbedingt der Fall ist die beste Lösung sein. Dies gilt natürlich auch für NoSQL-Befürworter;).

Das richtige Werkzeug für den richtigen Job auszuwählen, ist das, was ein erfahrener Programmierer wissen sollte.

Cthulhu
quelle
NoSQL-Datenbanken verarbeiten nicht mehr Daten oder schneller als relationale Datenbanken. Ich weiß nicht, wo Sie das gehört haben, aber es ist offensichtlich gefährlich falsch.
Aaronaught
@Aaronaught - Bearbeitet, danke für das Heads-up meiner vorzeitigen Annahme, :).
Cthulhu,
7

Schauen Sie sich diese Wikipedia-Einführung in die Computerprogrammierung an:

Computerprogrammierung (oft als Programmieren oder Codieren abgekürzt) ist der Prozess des Entwerfens, Schreibens, Testens, Debuggens / Fehlersuchens und Verwaltens des Quellcodes von Computerprogrammen. Dieser Quellcode ist in einer Programmiersprache geschrieben. Der Zweck der Programmierung besteht darin, ein Programm zu erstellen, das ein bestimmtes gewünschtes Verhalten aufweist.

Datenbankabfragen haben ihre eigenen Sprachen, sie können entworfen, getestet, fehlerbereinigt und verwaltet werden. Ziel einer Datenbankabfrage ist es, Ihnen zu ermöglichen, die benötigten Informationen so abzurufen, wie Sie sie benötigen.

Also ich denke, dass es definitiv programmiert.

Guiman
quelle
7

Ein guter Softwareentwickler mit Hintergrund in Unternehmens- und Geschäftsanwendungen (EDIT: speziell in Projekten, die ein RDBMS verwenden) sollte über Expertenwissen zum Schreiben relationaler Datenbankabfragen im Standardformat verfügen. Außerdem sollten sie in der Lage sein, komplexe Schemata zu verstehen und Schemadesigns mit mindestens mäßiger Komplexität vorzuschlagen.

Extrem fortgeschrittenes oder kompliziertes Schema-Design sollte der Bereich eines Datenmodellierers oder funktionalen Architekten sein.

Dies bedeutet nicht, dass Datenbankprogrammierer auch keinen Platz haben. Komplexe gespeicherte Prozeduren, komplexe und effiziente Abfragen sowie das Design und die Architektur von Software auf Datenbankebene, die auf die einzigartigen Tools und Angebote eines einzelnen Datenbankanbieters (z. B. Oracle, MySQL, SQLServer usw.) ausgerichtet sind, sollten nach Möglichkeit professioneller Software überlassen werden Ingenieure, die Erfahrung mit diesen hochspezialisierten und komplizierten Angeboten haben.

Die überwiegende Mehrheit der Geschäfts- und Unternehmenssysteme rechtfertigt jedoch meiner Meinung nach nicht den Bedarf an Datenmodellierern und spezialisierten Datenbankprogrammierern, aber ich habe bereits an solchen Projekten gearbeitet, die GROSS von dem Wissen und der Sachkenntnis profitiert haben, die diese Leute an den Tisch gebracht haben.

maple_shaft
quelle
2
-1: Ich bin absolut anderer Meinung, dass ein "guter" Softwareentwickler Experte für relationale Datenbankabfragen sein sollte.
John Saunders
3
Würden Sie immer noch anderer Meinung sein, wenn ich sage, dass ein guter ENTERPRISE- oder BUSINESS-Anwendungssoftware-Ingenieur (im Gegensatz zu eingebetteten Systemen usw.) und ich sage, dass diese Person ein Experte für relationale STANDARD-Datenbankabfragen sein sollte (ohne ausgefallenen Anbieter)? Besonderheiten wie analytische Abfragen und ähnliches)? Ein gründliches Verständnis der SQL SELECT-Anweisungen, aller Arten von Verknüpfungen, Vereinigungen, Überschneidungen und Zusammenführungen, Inline-Ansichten, Bedingungen, Ordnungs- und Gruppierungsergebnismengen sollte von JEDEM Softwareingenieur, der die oben angegebenen Bezeichnungen trägt, gründlich verstanden und ausführlich demonstriert werden.
maple_shaft
4
Meh. Ich arbeite bei einem großen Softwareunternehmen und wir beschäftigen uns überhaupt nicht mit RDBMS. Meine letzte Aufgabe bei der Entwicklung von Desktop-Software erforderte auch kein SQL. Ich bin mir nicht sicher, wie Sie Unternehmens- und Geschäftsanwendungen definieren, aber es scheint mir, dass Ihre Sicht der Dinge ein bisschen eng ist.
Adam Lear
2
Ich stehe zu dem, was ich gesagt habe. Theoretisch, wenn die Anwendung gut abgestuft und komponiert ist, gibt es keine Notwendigkeit für meine gesamte Berufserfahrung, mein Team und ich wären GEFALLEN, wenn wir keine SQL-Experten wären, selbst wenn wir ein spezielles Team für RDBMS-Design und -Entwicklung hätten. Vielleicht bin ich altmodisch oder habe einfach schreckliches Glück in meiner Karriere?
maple_shaft
3
@maple_shaft Ja, es ist nicht so, dass die Anwendungen, an denen ich gearbeitet habe, ausreichend komponiert waren. Es ist so, dass sie kein RDBMS verwendet haben, Punkt. Ich denke, es gibt verschiedene Bereiche. Der Punkt ist, Sie können nicht sagen, dass jeder Geschäfts- / Unternehmensentwickler gut in SQL sein muss. Das stimmt einfach nicht. Sei gut darin, wenn du es benutzt. Machen Sie sich keine allzu großen Sorgen, wenn Sie dies nicht tun, bis Sie es brauchen, wie bei jeder anderen Sprache oder Technologie.
Adam Lear
6

Andere haben Ihre Frage zu Datenbankabfragen bereits beantwortet.

Datenbankdesign ist eine bestimmte Art von Design. Es ist nicht so schwer zu lernen, aber der typische Datenbankdesigner hat nicht so viele Möglichkeiten, eine Datenbank zu entwerfen.

Der Ort, an dem ich arbeite, hat jetzt das gleiche Datenbankdesign wie 1970. Wir haben die Datenbank von IDMS nach DB2 verschoben, aber es ist das gleiche Netzwerkdatenbankdesign. In den 9 Jahren, in denen ich hier gearbeitet habe, hatte ich die Möglichkeit, 5 neue DB2-Tabellen zu erstellen.

Ich vermute, dass es nur sehr wenige Arbeitsplätze mit einem dedizierten Datenbankdesigner gibt. Ich würde also zu dem Schluss kommen, dass Datenbankdesign als Teil des Repertoires eines Senior Analysten gilt.

Gilbert Le Blanc
quelle
5

Ich bin ehrlich gesagt erstaunt, dass so viele von uns denken, dass sich jede Entwicklung um eine Datenbank und eine SQL-Datenbank dreht.

Andere haben die vielen Möglichkeiten erwähnt, mit denen wir die Unübersichtlichkeit von SQL in unseren Jobs vermeiden können, selbst wenn wir (indirekt) mit Datenbanken arbeiten, aber was ist mit all den Entwicklern, die die Firmware für die 101 elektrischen Produkte schreiben, die wir beide besitzen? Was ist mit den Jungs, die sich auf Echtzeitüberwachung spezialisiert haben?

Ich würde vorschlagen, dass die Mehrheit der heutigen Entwickler SQL-Kenntnisse in unterschiedlichem Maße besitzt, aber es ist weit davon entfernt, ein Barometer für ihre Fähigkeiten zu sein.

cjmUK
quelle
5

Ich denke, Sie überschätzen die Bedeutung von Datenbanken in Software.

Viele Anwendungsklassen sind nicht datenbankzentriert.

Benötigen wir jetzt ein DBMS in Textverarbeitungsprogrammen und Bildbearbeitungsprogrammen? Was ist mit Spracherkennung und Computer-Vision-Systemen, die viele Datenbankabfragen enthalten?

Und was ist mit linearen Video-Editoren und Videospiel-Physik-Engines?

Alex Jasmin
quelle
5

Ich würde von einem Generalisten-Entwickler erwarten, dass er zumindest ein Bewusstsein für Datenbanktechnologien (relational oder anderweitig) hat und in der Lage ist, die Vor- und Nachteile ihrer Verwendung zu diskutieren. Ansonsten fürchte ich, sie wissen nur, wie man Daten in flache Dateien packt.

Barry Brown
quelle
4

Ich denke nicht, dass das Schreiben von Abfragen eine zentrale Anforderung für Programmierer sein sollte. Dennoch glaube ich, dass ein Programmierer, der Abfragen schreiben und Datenbanken entwerfen kann, für eine Organisation wertvoller wäre.

Wenn dieser Programmierer jedoch nur Abfragen vom Typ "select * from tblxxxx" schreiben kann, würde ich diesen Programmierer nicht als Experten betrachten. Ebenso würde ich diesen Programmierer nicht als Experten betrachten, wenn die von diesem Programmierer entworfene Datenbank Eins-zu-Viele-Beziehungen in eine Tabelle statt in zwei Tabellen legt.

Hier ist, wie ich dies Nicht-IT-Leuten erkläre. IT-Experten spezialisieren sich in bestimmten Bereichen ähnlich wie Tischler, Elektriker und Installateure in den dort angesehenen Bereichen. Sie neigen dazu, einige der Fähigkeiten zu überlappen, sind jedoch keine Experten in allen Bereichen. Ein Elektriker kann einfache Tischlerarbeiten mit Zuversicht ausführen, würde es aber nicht gutheißen, komplexe Strukturen in Angriff zu nehmen.

Ebenso kann und sollte ein Programmierer wissen, wie man einfache Abfragen und Datenbankentwürfe schreibt oder manipuliert, aber es wird nicht erwartet, dass er eine komplexe Datenstruktur entwirft.

Michael Riley - AKA Gunny
quelle
3

Wenn Sie sich in unserer Abteilung umschauen, kommt es darauf an:

  • Unsere Desktop- / Web- / Server-Entwickler . Zumindest erforderlich, um grundlegende bis fortgeschrittene rohe Aussagen je nach ihrer Spezialität zu schreiben. Zur Optimierung haben wir einige spezialisierte DB-Administratoren.
  • Unsere Embedded-Programmierer . Nicht wenige kamen an "select * from mytable" nicht vorbei. Dies änderte sich jedoch auch in den letzten Monaten mit der Einführung von sqllite in ihren Projekten.
Carra
quelle