2010-07-24 2 views
9

Was ist besser für das Team arbeiten auf DB? Ist es die lokale Datenbankinstanz für jeden Entwickler oder jede gemeinsam genutzte Datenbank?Best Practices-Team arbeitet mit der Datenbank

+0

Es hängt davon ab, wie das Datenbankschema entworfen wird (wenn es entworfen wurde), wie kompliziert sind die Testdaten, wie stabil ist das Datenbankschema und der Inhalt. Es kann variieren wie die Entwicklung voranschreitet. – pascal

+0

Was ist BD? Ist das ein Tippfehler von DB, oder ein Produkt, von dem ich noch nichts gehört habe? –

+0

Ich fand diesen Artikel: http://odetocode.com/blogs/scott/archive/2008/01/30/three-rules-for-database-work.aspx Aber ich stimme mit "Pascal" Es hängt von der Datenbank ab Größe, Schema und andere Eigenschaften. – k0stya

Antwort

12

Nach meiner Erfahrung sollte ein Team (mindestens) eine gemeinsame Datenbank für die Integration haben.

Während der Entwicklung sollte jedes Teammitglied über eine unabhängige Datenbank verfügen, andernfalls können Änderungen des Datenbankschemas andere Teammitglieder behindern. Diese Instanzen können sich auch auf einem zentralisierten Server befinden.

1

Aus Erfahrung ist eine gemeinsame Datenbank besser. Unser Code hat die ganze Zeit unterbrochen, weil jemand eine Spalte in seiner lokalen Datenbank hinzugefügt und dann seinen neuen Quellcode in SVN hochgeladen hat. Die Implementierung aller anderen würde dann unterbrochen werden, bis sie herausgefunden hätten, was sich in der Datenbank geändert hatte.

Ich hätte eine gemeinsame Datenbank für die Entwicklung. Wir hatten auch eine oder zwei Entwicklungsdatenbanken für verschiedene Tests.

Wir haben einen zentralen Datenmodell-Skript, das eine beliebige Datenbank aktualisiert automatisch auf die neueste Version Schema:

+0

In einem anderen Fall, wenn jemand den Spaltentyp in der Datenbank geändert und das ORM-Schema nicht hochgeladen hat? – k0stya

+1

Wir haben Anwendungscode und DB-Code (gespeicherte Prozeduren, Schemaänderungen) auf die gleiche Weise behandelt. Wir hatten das gelegentliche vergessene DB-Update, aber Dev erfuhr schnell, dass sie lieber kein Ei im Gesicht haben würden, wenn wir den störenden Code identifizierten, der mit kontinuierlicher Integration und Tests nicht zu schwer war. Wir hatten eine Regel, die Sie benötigten, um ein Upgrade-Skript zu schreiben, bevor Sie automatisierte Tests eintrugen und schrieben, die gegen die DB laufen. – aqwert

4

Ich kann nur über die Art und Weise des Team ich bin in derzeit arbeitet, das paßt unsere Bedürfnisse gut genug sprechen. Entwickler checken Änderungen an diesem Skript zusammen mit Änderungen am Quellcode ein (Single Commit für dasselbe Repository). Die nächtlichen Builds aktualisieren eine zentrale Datenbankkopie, gefolgt von einem Stapel automatisierter Tests für diese Datenbank, und das menschliche QA-Team verwendet diese Datenbank am nächsten Tag für alle Tests.

Schemaänderungen auf der zentralen Datenbankinstanz können nicht anders als über die Integrationsbuilds zugelassen werden. Bei der Entwicklung des Schemaänderungsskripts werden Änderungen auf einer separaten Datenbankinstanz entweder auf dem zentralen Server oder lokal (je nach persönlicher Präferenz) entwickelt.

4

Ich glaube nicht, dass es überhaupt abhängt. Jede Umgebung sollte ihre eigene Datenbankinstanz haben. Persönlich würde ich niemals empfehlen, dass jeder im Team an der gleichen Kopie der Quelle arbeitet, und ich sehe den Datenbankcode und die Instanz auf die gleiche Weise an.

Wenn Sie Probleme mit fehlenden Datenbankänderungen haben, ist dies ein Symptom für ein anderes Entwicklungsprozessproblem. Es wäre sinnlos, zu vergessen, der Quellcodeverwaltung eine Codedatei hinzuzufügen.

Jeff Atwood has a pretty good article on source controlling database code.

Verschiedene Entwickler arbeiten angeblich zu verschiedenen Themen - wie vermeiden Sie auf andere Menschen die Zehen, während Unit-Tests treten?

Ich würde unbedingt eine Integration/Test-Umgebung befürworten, die über eine Continuous Integration process aktualisiert wird. Diese Umgebung dient oft auch als Lackmustest für Ihre Bereitstellungsprozedur.

3

Bei Redgate empfehlen wir, dass jeder Entwickler eine eigene Instanz erhält, da Sandboxing dafür sorgt, dass Entwickler sich nicht gegenseitig auf die Füße treten. Bei beiden Modellen gibt es jedoch Vor- und Nachteile.

Nach unserer Erfahrung mit Datenbankentwicklern wird ungefähr die Hälfte der Datenbankentwicklung in einer gemeinsamen Umgebung und die andere Hälfte in einer dedizierten Umgebung pro Entwickler ausgeführt.

1

Verschiedene Datenbankinstanzen für einen Entwickler helfen ihnen, isoliert zu arbeiten, aber wenn wir ein großes Team sind und gleichzeitig an mehreren Dingen arbeiten, ist es gut, eine gemeinsame Umgebung zu haben, damit alle Änderungen vorgenommen werden können zur gleichen Zeit geliefert werden, brechen sich nicht gegenseitig und ihre Abhängigkeiten konnten auch richtig herausgefunden werden. Dies hilft auch beim Identifizieren, wo eine Anwendung aufgrund einer Änderung unterbrochen werden kann. Daher ist es besser, eine gemeinsame Umgebung zu haben, zusammen mit einer isolierten Kopie der Entwicklungsumgebung, nur für den Fall, dass wir etwas Großes und Kompliziertes testen möchten, das sehr kritisch ist und trotzdem funktionieren muss.

Aber das einzige Problem ist, mehrere Umgebungen synchron zu halten, da jede fehlende Änderung fatal sein kann.

+0

Ja, separate Datenbanken * und * eine gemeinsame Umgebung für "Integration" -Tests zu haben, ist eindeutig das Ideal, und wenn Sie darüber nachdenken, bietet das kontinuierliche Integration. Entwickler sollten einzelne Sandboxes entwickeln, ihre Änderungen an die Quellcodeverwaltung übergeben, was eine kontinuierliche Integration auslöst, die eine Datenbank erstellt und testet, die alle Änderungen enthält. –

1

Ich weiß, dass die Leute hier in Bezug auf ihre Erfahrungen in der Vergangenheit sprechen, aber das ist keine so einfache Frage, die man universell beantworten kann. Für jeden Ansatz gibt es Vor- und Nachteile, die je nach Art der Anwendung und des Teams, mit dem Sie arbeiten, berücksichtigt werden sollten.

Wenn Sie nicht wissen, welche Route zu gehen .. Ich würde vorschlagen, gehen mit gemeinsamen Entwicklungsdatenbank zuerst, um zu sehen, wenn Sie irgendwelche Probleme auftreten. Wenn diese Lösung funktioniert, sollte sie die bevorzugte Methode sein, da sie den Schritt "Integration" eliminiert. Abhängig von der Art der Team- und Umgebungsbedürfnisse müssen Sie sich möglicherweise anpassen.

Verwandte Themen