Normalerweise fliege ich beim Aufbau meiner Datenbanken am Sitz meiner Hose. Allerdings wird mein neues Projekt einiges an Planung benötigen. Ich bin nie zur Datenbankentwicklung gegangen, daher habe ich keine formelle Schulung über den Planungsprozess.
Gibt es eine gute Software, Methoden für die Planung dieser Dinge?
Verfallen Sie nicht in die Falle, alles im Voraus zu gestalten. Es kann einfach nicht gemacht werden. Im weiteren Verlauf des Projekts finden Sie bessere Möglichkeiten, die bereits implementierten Funktionen zu implementieren. Und wenn Sie Erfahrungen mit Ihrem Projekt sammeln, erhalten Sie auch Einblicke in die Domäne und wie Sie die Datenbank am besten gestalten können.
Ich würde einen agilen Ansatz empfehlen. Entwerfen Sie ein kleines bisschen zu der Zeit. Und wenn Sie sehen, dass das, was Sie bereits kreiert haben, besser gestaltet sein könnte, refaktorisieren Sie das. Dies gilt sowohl für das Code- als auch für das Datenbankschema.
Ein Wort der Notiz jedoch. Wo es einfach ist, die Geschäftslogik umzuformen (wenn Sie die Geschäftslogik nicht in die Datenbank einfügen - was nicht.)? Nach dem Start der Anwendung ist das Refactoring der Datenbank nach dem Start erheblich schwieriger, weil Sie Daten pflegen müssen. Wenn Sie also ein Feld von einer Tabelle in eine andere verschieben müssen, müssen Sie Skripte ändern.
Wenn Sie also in der Nähe eines Starts sind, ist es vielleicht eine gute Idee, ein wenig voraus zu planen. Aber in den frühen Phasen der Entwicklung würde ich definitiv einen agilen Ansatz empfehlen. Erstellen Sie jeweils eine Tabelle. Ein Feld nach dem anderen.
Bleib bei den ersten normalen Formularen beim Entwerfen deines Schemas, wenn du nicht weißt, was du bist tun. Wahrscheinlich werden Sie Änderungen leichter machen als jede andere Methode, wenn Sie später Ihre Designfehler bemerken.
Wenn Sie Zweifel haben, zögern Sie nicht, nach Meinungen zu fragen. Die einfachste Methode zur Visualisierung eines Datenbankentwurfs besteht in der Verwendung von Entitätsbeziehungsdiagrammen (ER-Diagrammen). Außerdem können Sie auf einfache Weise sehen, wie Ihr Design aussieht, ohne Code durchzusehen.
Das Zeichnen in E-R-Diagrammen kann dabei helfen, die Komplexität zu verwalten.
Bearbeiten: Lassen Sie mich hinzufügen, dass es auch Regeln / Richtlinien gibt, um E-R-Diagramme in relationale Schemata zu übersetzen, und es gibt auch Werkzeuge, die den Prozess unterstützen.
Sie können Tabellen auf verschiedene Festplatten aufteilen, um den Zugriff zu beschleunigen (ich nehme an, mySQL kann dies tun). Sie können Hochgeschwindigkeits-Festplatten erhalten.
Vielleicht meinst du groß wie in, viele Tische. Das ist ein ziemlich großes Thema, aber Sie können damit beginnen:
Manche Entwickler, die am Hosenboden fliegen, machen solche Dinge nicht. Kudos für das Weiterdenken.
Visio kann Beziehungsdiagramme erstellen. So kann Papier und Bleistift.
Hier finden Sie einige Informationen zum Thema Datenmodellierung : Ссылка
Denken Sie über die Schemaversionierung nach. Wie gehen Sie mit Änderungen im Schema der Datenbank im Laufe der Zeit um? Müssen Sie Daten migrieren oder aktualisieren? Kannst du Daten während der Entwicklung wegwerfen?
Haben Sie von Anfang an separate Instanzen der Datenbank für Test, Staging und Live.
Zeichne viele Bilder.
Dies ist ein Ort, wo das Repository-Muster viel helfen kann. Ich benutze dieses Muster, wenn ich eine gute Vorstellung davon habe, wie die Software funktionieren soll, aber wenn mir eine klare Vorstellung von den beteiligten Daten fehlt. Im Allgemeinen ist es viel einfacher, die Mock-Objekte zu erstellen / zu refaktorieren als die Tabellen und die hinterlegten Prozeduren / Abfragen zu ändern.
Es klingt, als ob Sie das bereits wissen würden: aber für DB-Vernunft werden oft assoziative Entitäten ( Ссылка ) benötigt.
Ich würde mit einer Namenskonvention beginnen. Ich verwende * _NM (für Name) und _NUM (für Zahlen), V _ für Ansichten usw.
Nichts ist erschütternder, aber es macht Ihre Arbeit leichter, wenn Sie Ihre eigenen Tabellennamen und Zeilennamen erraten können, ohne sie nachschlagen zu müssen. Egal, was Sie wählen, stellen Sie sicher, dass es sinnvoll und konsistent ist. Die meisten professionellen DAs verwenden nur Großbuchstaben für Tabellennamen.
Persönlich verwende ich ID für IDs in jeder Tabelle, die eine ID hat (die normalerweise eine PK ist), und dann für die Fremdschlüsselbeziehungen als _ID, um die Beziehung darzustellen. Zum Beispiel
Table SCHOOL hat eine PK ID.
Tabelle STUDENT hat eine PK der ID und einen FK, der auf die Tabelle SCHOOL, SCHOOL_ID verweist.
Wenn man sich also die Student-Tabelle ohne ERDs anschaut, sieht man leicht, dass SCHOOL_ID auf SCHOOL.ID verweist und es sieht auch gut aus, wenn man die SQL-Anweisung liest.
In Bezug auf das Datenmodellierungswerkzeug Erwin: Ссылка
Bevor ich also einen Ratschlag gebe, wie ein großes Schema am besten zu entwerfen ist, muss ich eine Frage stellen: Ist ein großes Schema absolut notwendig?
Sie haben gefragt, ob es gute Software-Methoden für die Planung großer Systeme gibt. Tatsächlich gibt es einen der besten Ansätze für eine komplexe Softwareentwicklung: SOA: Service Oriented Architecture. Wenn Sie sich ein wenig über SOA-Best Practices jenseits der Datenbank-Ebene informieren möchten, empfehle ich Ihnen, Thomas Erls Bücher zu lesen, insbesondere seine SOA: Principles of Service Design. Ich empfehle auch, einige der Vorlesungen von Udi Dahan zu serviceorientierten und domänenorientierten Designs und Architekturen zu hören. Viel gutes Wissen, das man von diesen beiden Jungs haben kann.
Wenn es um Datenbanken geht, bevor Sie eintauchen und ein sehr großes, komplexes Schema entwickeln, stellen Sie sicher, dass Sie es wirklich, wirklich brauchen. In einer serviceorientierten Umgebung besteht die Motivation darin, eindeutige, untrennbare Grenzen zwischen den verschiedenen Diensten der Geschäftsprobleme zu identifizieren, die Sie zu lösen versuchen. Sobald Sie diese Grenzen identifiziert haben, sollten Sie feststellen, dass es kleinere Schemas gibt, die in ihnen erstellt werden können. Manchmal führt dies zu Datenduplizierung, da Informationen von einem Dienst zu einem anderen veröffentlicht werden müssen, wenn sie Grenzen überschreiten müssen. Aber die Vorteile mehrerer kleinerer, weniger komplexer Schemata können enorm sein. Sie erhalten größere Autonomie, Portabilität, Flexibilität und Wartbarkeit als bei einem einzelnen monströsen Schema.
Sehen Sie sich SOA an, insbesondere, wie Sie mit Datenbanken in einer serviceorientierten Architektur umgehen. Die folgende Präsentation von Udi Dahan sollte ebenfalls einige sehr nützliche Einsichten liefern: