Was ist besser für ein Team, das an einer Datenbank arbeitet? Ist es eine lokale Datenbankinstanz für jeden Entwickler oder eine gemeinsam genutzte Datenbank?
Antworten
Zu viele Anzeigen?In meiner Erfahrung sollte ein Team (mindestens) eine gemeinsame Datenbank für die Integration haben.
Während der Entwicklung sollte jedes Teammitglied eine unabhängige Datenbank haben, da Änderungen am Datenbankschema andere Teammitglieder behindern könnten. Diese Instanzen könnten auch auf einem zentralisierten Server liegen.
Ich kann nur über die Arbeitsweise des Teams sprechen, in dem ich aktuell tätig bin, die unseren Bedürfnissen gut entspricht:
Wir haben ein zentrales Datenmodellskript, das automatisch jede Datenbank auf die neueste Schemaversion aktualisiert. Entwickler überprüfen Änderungen an diesem Skript zusammen mit Änderungen am Quellcode (ein einziger Commit im selben Repository). Die nächtlichen Builds aktualisieren eine zentrale Datenbankkopie, gefolgt von einer Reihe automatisierter Tests auf dieser Datenbank, und das menschliche QA-Team verwendet am nächsten Tag auch dieselbe Datenbank für all ihre Tests.
Wir erlauben keine Schemänderungen am zentralen Datenbank-Instanz auf andere Weise als über die Integrationsbuilds. Zur Entwicklung des Schemasänderungsskripts werden Änderungen an einer separaten Datenbank-Instanz entwickelt, entweder auf dem zentralen Server oder lokal (je nach persönlicher Präferenz).
Ich denke überhaupt nicht, dass es darauf ankommt. Jede Umgebung sollte eine eigene Datenbankinstanz haben. Persönlich würde ich nie empfehlen, dass jeder im Team an derselben Kopie des Quellcodes arbeitet, und ich betrachte den Datenbankcode und die Instanz genauso.
Wenn Sie Probleme mit fehlenden Datenbankänderungen haben, ist dies ein Symptom für ein anderes Problem im Entwicklungsvorgang. Das wäre analog dazu, vergessen zu haben, eine Code-Datei zur Versionskontrolle hinzuzufügen.
Jeff Atwood hat einen ziemlich guten Artikel über das Source Controlling von Datenbankcode.
Unterschiedliche Entwickler arbeiten angeblich an unterschiedlichen Problemen - wie vermeiden Sie es, sich beim Unit Testing in die Quere zu kommen?
Ich würde absolut für eine Integrations-/Testumgebung plädieren, die über einen Continuous Integration Prozess aktualisiert wird. Diese Umgebung dient oft auch als Maßstab für Ihr Bereitstellungsverfahren.
Bei Redgate würden wir empfehlen, dass jeder Entwickler eine eigene Instanz erhält, da die Isolierung sicherstellt, dass Entwickler sich nicht in die Quere kommen. Es gibt jedoch Vor- und Nachteile bei beiden Modellen.
In unserer Erfahrung im Gespräch mit Datenbankentwicklern wird etwa die Hälfte der Datenbankentwicklung in einer gemeinsamen Umgebung und die andere Hälfte in einer dedizierten Umgebung pro Entwickler durchgeführt.
Aus Erfahrung ist eine gemeinsame Datenbank besser. Unser Code brach ständig zusammen, weil jemand eine Spalte in ihrer lokalen Datenbank hinzugefügt hatte und dann ihren neuen Quellcode in SVN hochgeladen hatte. Die Implementierung aller anderen würde dann zusammenbrechen, bis sie herausfanden, was sich in der Datenbank geändert hatte.
Ich würde eine gemeinsame Datenbank für die Entwicklung haben. Wir hatten auch ein oder zwei Entwicklungsdatenbanken für verschiedene Tests.
- See previous answers
- Weitere Antworten anzeigen