Es gibt eine konzeptionelle Grundlage für das Datenbankdesign.
Im klassischen Datenbankdesign gibt es drei Modelle: konzeptionell, logisch und physisch.
Das konzeptionelle Modell ergibt sich aus der Anforderungsanalyse und entwickelt sich, wenn sich der zugrundeliegende Gegenstand entwickelt oder wenn sich das Verständnis des Gegenstands entwickelt. Das konzeptionelle Modell legt elementare Daten wie Form und Semantik fest, behandelt jedoch nicht solche Probleme wie die Tabellenzusammensetzung.
Das logische Modell verwendet das relationale Datenmodell. Es kann aus dem konzeptionellen Modell abgeleitet werden, aber es befasst sich auch mit der Zusammensetzung der Beziehungen. Normalisierung und andere Kompositionsprobleme kommen hier zum Tragen. Das logische Modell nimmt das Tabellendesign und die Abfragen und Aktualisierungen der Anwendung vorweg.
Das physische Modell implementiert Beziehungen als Tabellen und fügt auch alle anderen Features wie Indizes, Tablespaces usw. hinzu.benötigt, um die Datenbank tatsächlich zu erstellen. Es wird vom logischen Modell abgeleitet, aber Datenvolumen, Auslastung, Leistung und Speicherplatz spielen alle eine Rolle.
Das klingt lang und langweilig, aber es ist tatsächlich schnell, wenn Sie wissen, wie es geht. Das Ganze kann in wenigen Wochen erledigt werden, während der Rest des Teams immer noch über funktionale Spezifikationen debattiert. Für ein wirklich kleines Projekt (6 Tische, 50 Spalten) ist es in Tagen möglich, nur mit Bleistift und Papier. Für größere Projekte gibt es Werkzeuge, die das Design automatisieren, weniger fehleranfällig machen und einfach grafisch darstellen.
Aber was passiert, wenn Sie feststellen, dass das konzeptionelle Modell ungenau oder unvollständig war und die anderen beiden Modelle und die Datenbank selbst geändert werden müssen? Das ist, wo Data Independence zur Rettung kommt. Die Datenunabhängigkeit macht für das Datenbankdesign aus, was die Kapselung für das Objektdesign tut. Es verhindert nämlich, dass sich eine geringfügige Anpassung an einem Ort über die gesamten Anwendungsobjekte ausbreitet. Objekte sind nur von den Daten abhängig, die sie verwenden.
Wenn eine neue Tabelle zu einem Schema hinzugefügt werden muss, ist die Wahrscheinlichkeit, dass eine Anwendung beschädigt wird, verschwindend gering. Auch wenn eine vorhandene Tabelle geändert werden muss, sehen Abfragen, die nur die alten Spalten verwenden, keinen Unterschied. Auch wenn Objekte von der Änderung abhängig sind, können Sie der geänderten Tabelle immer noch einen neuen Namen geben und dann eine Ansicht mit dem alten Namen erstellen, sodass die alte Tabelle immer noch angezeigt wird.
Und physikalische Daten Unabhängigkeit ist fast in einem guten DBMS abgeschlossen. Sie können Daten reorganisieren, Indizes hinzufügen und löschen, und Sie sollten keine Anwendung ändern müssen.
Kurz gesagt, kann das Änderungsmanagement hervorragend mit den wirklich guten DBMS-Produkten durchgeführt werden. Leider wissen viele DBAs und Programmierer nicht, wie sie diese DBMS-Funktionen adäquat nutzen können, obwohl sie schon seit Jahren existieren.
Was ist, wenn man das umdreht: sagen die Spezifikationen des Kunden sind derzeit nur für einen Künstler pro Tourdate, aber in Zukunft könnten zwei ihrer Bands gemeinsam auf Tour gehen und somit auf denselben Shows spielen. Fügen Sie der Tabelle "tourdates" noch artist_id hinzu, indem Sie das System auf 1 Künstler pro Tourdatum beschränken? Oder denken Sie voraus und machen es zu einer HaBtM-Beziehung? – Calvin