Wenn ich die Software entwerfe und erstelle, an der ich arbeite, entwerfe und erstelle ich normalerweise zuerst die Back-End-SQL-Tabellen und fahre dann mit der eigentlichen Programmierung fort. Das Projekt, an dem ich gerade arbeite, hat mich allerdings ziemlich verwirrt. Dies liegt wahrscheinlich an einem Mangel an guten, soliden Voraussetzungen, aber diesmal kann ich leider wenig dagegen tun. Es ist eine Art "Just go make it happen" Situation, aber ich schweife ab.
Ich denke daran, meinen Workflow auf den Kopf zu stellen und zuerst die UI- und Datenmodellklassen zu erstellen, in der Hoffnung, dass mir durch das Herausarbeiten klar wird, wie mein Datenbankschema letztendlich aussehen wird. Ist das eine gute Idee? Ich bin nervös, dass ich eine Benutzeroberfläche bekomme und immer noch keine Ahnung habe, wie ich die Datenbank strukturieren soll.
Wenn jemand neugierig ist, verwende ich SQL Server als Backend und MS Access als Frontend-Anwendung. (Zugang ist auch nicht meine Wahl ... also bitte hasse es nicht so schlecht.)
quelle
Antworten:
Was war zuerst da, der Prozess oder die von diesem Prozess verwendeten Daten? Ich weiß, dass dies eine Art "Henne oder Ei" -Frage ist, aber im Fall von Software glaube ich, dass dies der Prozess ist.
Zum Beispiel können Sie Ihr Datenmodell schrittweise aufbauen, indem Sie jeweils einen einzelnen Anwendungsfall mit nur speicherinterner Persistenz implementieren (oder alles, was so einfach zu implementieren ist). Wenn Sie der Meinung sind, dass Sie genügend Anwendungsfälle implementiert haben, um die grundlegenden Entitäten zu skizzieren, können Sie die speicherinterne Persistenz durch eine echte Datenbank ersetzen und dann das Schema bei jedem weiteren Anwendungsfall weiter verfeinern.
Dadurch wird der Fokus aus der Datenbank entfernt und zum Kern des Problems verschoben: den Geschäftsregeln. Wenn Sie mit der Implementierung der Geschäftsregeln beginnen, werden Sie schließlich feststellen (durch einen Prozess, der im Übrigen Natural Selection sehr ähnlich ist), welche Daten vom Unternehmen wirklich benötigt werden. Wenn Sie mit der Modellierung der Datenbank beginnen und nicht wissen, ob diese Daten wirklich benötigt werden (oder in diesem Format oder in diesem Normalisierungsgrad usw.), werden Sie am Ende entweder eine Menge später Anpassungen vornehmen das Schema (das möglicherweise umfangreiche Migrationsvorgänge erfordert, wenn das Unternehmen bereits damit arbeitet), oder Sie müssen "Workarounds" in den Geschäftsregeln implementieren, um das gestörte Datenmodell auszugleichen.
TL; DR: Die Datenbank hängt vom Geschäft ab - sie wird von ihnen definiert. Sie benötigen die Daten nur, wenn Sie über einen Prozess verfügen, der damit arbeitet (ein Bericht ist auch ein Prozess). Implementieren Sie zuerst den Prozess und Sie werden feststellen, welche Daten benötigt werden. Modellieren Sie zuerst die Daten, und Sie können möglicherweise nur zählen, wie viele Annahmen beim ersten Modellieren falsch waren.
Ein wenig außerhalb des Themas, aber sehr wichtig: Der von mir beschriebene Workflow wird häufig zusammen mit sehr wichtigen Methoden wie "Das Einfachste, was möglicherweise funktioniert", testgetriebener Entwicklung und dem Fokus, Ihre Architektur von den Details zu entkoppeln, verwendet sich in den Weg stellen (Hinweis: Datenbank). Über den letzten, fasst dieser Vortrag die Idee ziemlich gut zusammen.
quelle
Eine Ursachenanalyse legt nahe, dass es sich bei diesem Problem nicht um eine Methode handelt, sondern um das Fehlen einer Spezifikation. Ohne eins ist es eigentlich egal, was Sie zuerst schreiben - Sie werden es trotzdem wegwerfen.
Tun Sie sich selbst einen Gefallen und führen Sie grundlegende Systemanalysen durch - identifizieren Sie einige Benutzer auf verschiedenen Ebenen, stellen Sie einen schnellen und schmutzigen Fragebogen zusammen, schalten Sie die Maschine aus, holen Sie sich Kaffee und Kekse / Donuts (oder was auch immer die Räder schmiert) und gehen Sie zu Fragen Sie ihre Schreibtische, was sie tun und was sie wissen / aufzeichnen müssen, um ihre Arbeit zu erledigen, auch wenn es offensichtlich erscheint - fragen Sie immer noch. Machen Sie sich keine Sorgen darüber, wie wichtig sie sind. Wenn sie zu beschäftigt sind, treffen Sie eine Vereinbarung, um ein anderes Mal zurückzukehren oder es bei ihnen zu lassen.
Sobald Sie das haben, sollten Sie in der Lage sein, mit dem Bauen zu beginnen, von dem Sie glauben, dass es die besten Ergebnisse bringt, und warten, bis der Rest der Spezifikation eingeht.
quelle
Meine Erfahrung ist wie folgt:
Denken Sie auch daran:
Fazit: Ich empfehle Ihnen, zuerst die Datenbank zu entwerfen.
quelle
Ich wollte Database First sagen, da ich viel Erfahrung mit großen Projekten habe und Sie wirklich ein solides Datenmodell benötigen, wenn viele Entwickler parallel arbeiten.
Aber dann habe ich ein bisschen mehr darüber nachgedacht und festgestellt, dass das, was wir bei den erfolgreicheren Großprojekten wirklich machten, "Anforderungen zuerst" waren.
Ein gut spezifizierter Satz von Geschäftsanforderungen führt zu einem guten Satz von funktionalen Anforderungen. Wenn Sie gute funktionale Anforderungen haben, lassen sich die Datenmodell- und Modulspezifikationen einfach ohne großen Aufwand einfügen.
quelle
Da dies so flüssig / unspezifisch erscheint, würde ich zuerst die Frontend-GUI erstellen - das klingt nach dem, was Sie benötigen, um Antworten, Unterstützung, Zeit und Feedback von den Stakeholdern zu erhalten, oder? Sie kümmern sich nicht um Ihre brillanten normalisierten Tabellen, Fremdschlüsselbeschränkungen und kaskadierenden Löschvorgänge. Aber eine coole Benutzeroberfläche mit vielen glänzenden Farben - das ist erstklassig!
Verwenden Sie für die anfängliche "Datenbank" des Backends etwas sehr Einfaches, möglicherweise nur Schlüssel / Werte, die in einer Datei gespeichert sind. Ich bin mit MS Access nicht vertraut, weiß also nicht, was das "leichteste" Backend wäre. Was auch immer schnell und schmutzig ist, wirf es weg.
Wenn Sie können, verwenden Sie ein lustiges Aussehen und Verhalten in der GUI, um zu verdeutlichen, dass es sich um einen Prototyp handelt. Wenn alles andere fehlschlägt, verwenden Sie Karteikarten.
Vielleicht sind Ihre Stakeholder DB-Experten - das war bei mir manchmal der Fall! - In diesem Fall führen Sie einige DB-Entwürfe durch.
quelle
Da die Anforderungen nicht klar sind, kann man mit einem sehr rudimentären Datenmodell mit den Schlüsselelementen beginnen, von denen Sie wissen, dass Sie sie benötigen, möglicherweise nur mit einfachen Tabellen und PKs. Den Rest der Daten serialisieren Sie in binär oder XML und speichern Sie das BLOB zunächst in der Datenbank. Das sollte es einem ermöglichen, die Benutzeroberfläche und die Business-Schicht (Middle Tier) ohne ein vollständig relationales Modell zu entwickeln, aber Sie werden weiterhin die Möglichkeit haben, Schlüssel nach Bedarf zu speichern und abzurufen und sie einfach nachzuschlagen.
Als Beispiel haben Sie vielleicht eine Person, also eine PK mit einer Personen-ID. Die restlichen Attribute sind nicht bekannt. Beginnen Sie also mit einer Personentabelle mit einer PK-Personen-ID und einer weiteren Spalte, in der das Blob mit allen Personendaten gespeichert wird.
Sobald sich die Anforderungen verfestigt haben, nehmen Sie Ihre Blobs, extrahieren Sie alle benötigten Tabellen und Spalten und machen Sie das Modell relational. Dann geht es nur darum, die Beständigkeit von einem BLOB in eine relationale in der Datenzugriffsschicht zu ändern. Aber alles andere, die Benutzeroberfläche für Geschäftsregeln usw. wird weiterhin funktionieren. Beachten Sie, dass dies dem Projekt etwas Zeit hinzufügt, aber die vollständige Flexibilität bietet, Dinge nach Bedarf hinzuzufügen und zu löschen, ohne das relationale Modell zu ändern, bis die Dinge fester werden
Die Suche kann sich verzögern, da Sie kein BLOB abfragen können. Wenn sich das Modell stabilisiert, speichern Sie die zu durchsuchenden Daten in relationalen Spalten.
Grundsätzlich beginnen Sie mit einem tabellarischen Modell und wechseln im Verlauf des Projekts zu einem relationalen Modell.
Oder legen Sie die Anforderungen fest, bevor Sie mit der Arbeit beginnen, damit zunächst ein relationales Modell entwickelt werden kann.
quelle
Im Allgemeinen denke ich, dass Code nach Daten kommt, weil der Code die Daten manipulieren wird.
Wenn die Anforderungen nicht klar sind, können Sie ein Datenmodell Ihrer Interpretation der Anforderungen erstellen. Am besten ist es, einige Anforderungen aufzuschreiben und an Ihren Arbeitgeber zu senden, dann haben sie etwas zu schießen. Oder erst eine GUI erstellen, es kommt auf die Art des Arbeitgebers an, was am besten funktioniert :)
quelle