Ist es die Aufgabe der Programmierer, die Datenbank zu entwerfen?

16

Ich bin seit sechs Jahren Programmierer. Während meiner Karriere habe ich an vielen Webanwendungen gearbeitet.

Die meiste Zeit, wenn eine Datenbank benötigt wurde, wurde sie uns (den Programmierern) übergeben oder wir mussten an einer alten Datenbank arbeiten. Wenn nicht, mussten wir die Datenbank selbst erstellen und entwerfen, was nicht so schwierig war.

Aber sollen wir als Programmierer die gesamte Datenbank von Grund auf neu erstellen, wenn wir eine neue Anwendung erstellen müssen, in der Daten so wichtig sind und unübersichtliche Anforderungen mit einem komplexen Datenmodell haben?

Ist es nicht im besten Interesse der App und des Unternehmens, dies von einem Experten durchführen zu lassen?

Ich versuche nicht, vor dem Entwerfen der Datenbank davonzulaufen, aber es ist eine Sache, die so wichtig ist, richtig zu machen.

ashishjmeshram
quelle
2
Die Antwort ist ja. Wird die richtige Antwort Ihrem Management dabei helfen, seine Meinung zu ändern? Ich glaube nicht Auf der anderen Seite wird es eine sehr gute Erfahrung sein. Versuchen Sie doch einmal, das Datenschema zu entwerfen.
Eminemenz
9
"DB-Experte" und "Programmierer" schließen sich nicht aus. Sie möchten, dass ein Experte die Datenbank entwirft. Dieser Experte könnte ein Programmierer sein.
Lord Tydus
10
Ist es meine Aufgabe als Soldat zu wissen, wie man ein Pferd reitet? Dies kann Teil des Trainings sein oder auch nicht, aber wenn Ihr Überleben aus irgendeinem Grund vom Pferd abhängt, liegt die Antwort auf der Hand. Wenn sich Ihre Stellenbeschreibung überraschend ändert, schauen Sie vielleicht woanders hin. Ich persönlich würde diese db Fähigkeiten aufgreifen, nur weil ich nicht gerne von anderen abhängig bin.
Job
@ Job hätte es nicht besser sagen können :)
Songo

Antworten:

32

Zuallererst ist es Ihre Aufgabe, wenn der Projektmanager es Ihnen sagt. Kleinere Unternehmen haben oft keine Vollzeit-DB-Experten. Es gibt ohnehin keine klare Unterscheidung zwischen Entwicklern und DB-Experten (und sollte es auch nicht geben) - jeder gute Entwickler verfügt über beträchtliche Kenntnisse über DBs, und jeder gute DBA kann zumindest in der Sprache der DB für gespeicherte Prozeduren codieren .

Während das DB-Design ein ziemlich zentraler Teil einer Anwendung ist, ist es nicht wichtiger, "richtig" zu sein als andere zentrale Teile, von denen eine Menge anderer Code abhängt.

Und genau wie bei Code ist die Idee, dass Sie einen Super-Experten dazu bringen, sich eine Woche lang hinzusetzen und gründlich nachzudenken und dann das perfekte Design aufzuschreiben, das sich niemals ändern muss, eine Illusion. Das DB-Design kann und wird sich während der Entwicklung der Anwendung ändern.

Es ist daher von Vorteil, die DB von einem Programmierer (der die DBs gut versteht) entwickeln zu lassen, da Sie dann jemanden haben, der beide Seiten kennt. Das ist sicherlich besser, als es von jemandem machen zu lassen, der nur DBs versteht und nichts mit dem Rest der Entwicklungsarbeit zu tun hat.

Michael Borgwardt
quelle
Könnten Sie mir bitte den Unterschied zwischen einem Datenbankadministrator und einem Datenbankentwickler bezüglich des Datenbankdesigns erklären?
Songo
@Songo: IMO sollte es keinen Unterschied geben.
Michael Borgwardt
1
Ja wirklich? Ich war immer der Meinung, dass ein Datenbankadministrator sich mehr mit dem Ausführen und Optimieren einer Datenbank befasst, während sich ein Datenbankentwickler mehr mit Datenbankmodellierung und -design befasst!
Songo
3
Datenbankadministrator und Datenbankentwickler sind zwei verschiedene Dinge. Kleine und mittlere Unternehmen kennen den Unterschied normalerweise nicht. Wenn Sie in einem großen Unternehmenssystem arbeiten, verfügen Sie möglicherweise über dba, einen Business Intelligence-Entwickler (Analysedienste, Data Warehouse) und einen Datenbankentwickler. Für uns sind das sehr unterschiedliche Berufe.
CodeART
1
@CodeWorks: Sie sind sicherlich verschieden, aber IMO ist es ein organisatorisches Antimuster, eine übermäßige Spezialisierung dieser Art zu etablieren, da dies die Zusammenarbeit zwischen Menschen, die nur ihre Spezialisierung kennen, sehr problematisch macht.
Michael Borgwardt
4

Es ist üblich, dass Programmierer die Datenbank erstellen. Sehr gewöhnlich. Leider haben viele Programmierer keine Erfahrung mit der DB. Sie verstehen nicht, wie man gegen Big Data, die Konzepte von Data Marts, Sternschemata usw. berichtet. Einige verstehen nicht einmal die Grundlagen der Normalisierung.

Wenn ein Mann die Fähigkeiten hat, alles auf Expertenebene zu tun, ist dies ein sehr gutes Produkt. Eine Ein-Mann-Armee kann mit 1000-facher Qualität in einem Bruchteil der Zeit das schaffen, was ein 10-Mann-Team kann. Keine Übertreibung.

Es ist im besten Interesse für den Programmierer, dies zu tun (weniger Leute), vorausgesetzt, der Programmierer weiß, was er tut. Natürlich gibt es auch Tausende von Fehlern, auf die man hinweisen kann.

Lord Tydus
quelle
Ich finde, dass dies in all meinen kleinen Teams sehr häufig vorkommt. Von den Entwicklern mit wenig DB-Erfahrung wird erwartet, dass sie Datenbanken unter ihrem Code entwerfen (nicht so schwierig) und optimieren (viel schwieriger). Ich wünschte immer, ich könnte einen DBA zur Verfügung haben.
Rig
1
"Keine Übertreibung." Es ist, wenn Sie diese Behauptung nicht irgendwie qualifizieren können.
Burhan Ali
4

Es ist eine interessante Frage - es gibt ein starkes Argument dafür, dass die meisten anständigen Entwickler verstehen sollten, wie man eine relationale Datenbank richtig strukturiert, das heißt, dass sie in der Lage sein sollten, ein normalisiertes Schema zu erstellen und - basierend auf Erfahrung und gemeinsamen Mustern - vernünftig zu machen Entscheidungen darüber, wie Daten strukturiert gespeichert werden sollen (für mich ist es meist selbstverständlich, aber ich weiß, dass nicht jeder das so sieht).

Wenn Sie sich außerdem Entity Framework Code-first ansehen, der besagt, dass derselbe Gedanke, mit dem ein Datenmodell auf niedriger Ebene erstellt wird, ein vernünftiges Schema ergibt - oder zumindest einen Hinweis darauf.

Nein, ich glaube nicht, dass Sie einen Datenbankexperten benötigen, um ein Datenbankschema zu entwerfen - zumindest nicht für kleine und mittlere Datenbanken (an denen ich gearbeitet habe).

Das Problem ist, dass das Entwerfen eines guten (oder zumindest angemessenen) Schemas nicht die ganze Geschichte ist - insbesondere nicht, wenn die Datenbank skaliert werden muss. Es scheint mir, dass der "Mehrwert" eines DBAs darin besteht, andere Dinge als das grundlegende Schema richtig zu machen - Indizes, Speicherkonfiguration, Pflege der Datenbank (Kontrolle der Dateigröße, Neuerstellung von Indizes usw.), schlauer zu sein mit Benutzern und Rollen und so weiter und so fort.

Ein guter Programmierer sollte ein vielfältiges Portfolio an Fähigkeiten mitbringen - sollte mehr als ein Codierer sein, und ich würde das Verständnis von Datenbanken in dieses Portfolio einbeziehen.

Murph
quelle
4

Ich denke, die Fähigkeit, eine vernünftige relationale Datenbank zu entwerfen, ist im Wesentlichen eine Notwendigkeit für Nicht-Junior-Programmierer.

Vor allem für große Anwendungen ist es wichtig, dass die Datenbank beim ersten Mal "richtig" eingestellt wird (Schema, Indizierung usw.). Wenn das Unternehmen Zugang zu einem qualifizierten DBA hat, sollte diese Aufgabe auf ihren Teller fallen; Im Allgemeinen werden sie qualifizierter sein. Potenzielle Überprüfungen / Diskussionen sollten mit dem Hauptentwickler durchgeführt werden, der auf der Clientseite auf die Datenbank zugreift und mit ihnen arbeitet, damit es keine Überraschungen gibt. Wenn kein DBA vorhanden ist, entwirft der Programmierer die Datenbank.

Bobby Everyteen
quelle
1
Datenbankadministratoren sind nicht unbedingt Datenanalysten. Es sind unterschiedliche Fähigkeiten erforderlich, um eine Datenbank zu optimieren und relationale Daten zu normalisieren.
Gilbert Le Blanc
1

Ich sehe hier zwei Fragen:

  • Sollten Datenbankentwickler Geschäftslogik modellieren?
  • Sollte ich wissen, wie ich Daten in der Datenbank speichern kann?

Geschäftslogik

  • Geschäftslogik befindet sich nicht in einer Datenbank. Es ist ein konzeptionelles Modell, das von anderen Ebenen in Ihrem System unabhängig sein muss.

  • Sie können jederzeit eine Datenbank durch eine andere ersetzen oder sich sogar für die Verwendung von NoSQL-Lösungen entscheiden, um potenzielle Leistungsprobleme zu beheben.

  • Datenbankentwickler können in den Modellierungsprozess einbezogen werden. Normalerweise wird dies jedoch von Personen durchgeführt, die die Problemdomäne vollständig verstehen. In unserer Organisation wird dies von serverseitigen Entwicklern durchgeführt.

  • Viele denken, dass die Datenbank eine Grundlage für Ihre Anwendung ist. Wenn Sie ein schlechtes Fundament herstellen, wird das System herunterfallen. Ich bin damit nicht einverstanden. Ich sehe die Datenbank als Speichermedium, das immer ersetzt werden kann.

Persistierende Daten

  • Sie sollten wissen, wie Sie Daten auf verschiedenen Speichermedien, einschließlich SQL- und NoSQL-Lösungen, speichern können.

  • Der Grad des erforderlichen Fachwissens hängt von der Größe des Systems ab, an dem Sie arbeiten.

  • Kleine Unternehmen erwarten, dass Sie über dieses Wissen verfügen, wenn größere Unternehmen normalerweise Experten einstellen, um die Anforderungen in Bezug auf Leistung, Skalierbarkeit und Sicherheit zu erfüllen.

Zusammenfassen:

  • Das Domänenmodell ist eine Grundlage für Ihr System, nicht für die Datenbank.

  • Wenn Sie für ein kleines Unternehmen an einem relativ kleinen Projekt arbeiten, sollten Sie die Datenbank wahrscheinlich selbst entwerfen.

  • Wenn Sie für ein großes Unternehmen auf einem Unternehmenssystem arbeiten, ist es wahrscheinlich sinnvoller, die Arbeit an die Domänenexperten weiterzuleiten.

CodeART
quelle