Cum să organizez scenariul master ddl

În prezent, creez un master ddl pentru baza noastră de date. Din punct de vedere istoric, am folosit backupul / restaurarea la versiunea bazei noastre de date și nu am păstrat nici un script ddl. Schema este destul de mare.

Gândirea mea actuală:

  • Break script into parts (possibly in separate scripts):

    1. table creation
    2. add indexes
    3. add triggers
    4. add constraints
  • Each script would get called by the master script.

  • I might need a script to drop constraints temporarily for testing
  • There may be orphaned tables in the schema, I plan to identify suspect tables.

Orice alt sfat?

Editați: De asemenea, dacă cineva știe instrumente bune pentru a automatiza o parte din proces, folosim MS SQL 2000 (vechi, știu).

0
fr hi bn

7 răspunsuri

Am organizat anterior codul meu DDL organizat de un fișier per entitate și am creat un instrument care a combinat acest lucru într-un singur script DDL.

Fostul meu angajator a folosit o schemă în care toate tabelele DDL au fost într-un singur fișier (stocate în sintaxa oracolului), indicii în altul, constrângeri într-un al treilea și date statice într-un al patrulea. Un script de schimbare a fost păstrat în paralel cu acest lucru (din nou în Oracle). Conversia la SQL a fost manuală. A fost o mizerie. De fapt, am scris un instrument la îndemână care va converti Oracle DDL în SQL Server (a funcționat 99,9% din timp).

Recent am trecut la utilizarea Sistemul Visual Team Team pentru profesioniștii bazei de date . Până acum funcționează bine, dar există unele glitches dacă utilizați funcțiile CLR în baza de date.

0
adăugat

@Adam

Sau cum despre doar domeniul de domeniu - o grupare utilă de tabele conexe în același fișier, dar separat de restul?

Doar problema este dacă unele domenii (în acest sistem oarecum moștenit) sunt strâns legate. În plus, trebuie să mențineți dependențele dintre diferitele sub-scripturi.

0
adăugat

Ceea ce aveți acolo pare a fi destul de bun. Compania mea are ocazia, pentru baze de date suficient de mari, să o distrugă și mai mult, poate la nivelul fiecărui obiect. În acest fel fiecare tabel / index / ... are propriul fișier. Poate fi util, poate fi suprasolicitat. Într-adevăr depinde de modul în care îl utilizați.

@Justin

Domeniul este în general întotdeauna suficient. Sunt de acord că există o serie de complexități care trebuie abordate atunci când faceți acest lucru în acest fel, dar acest lucru ar trebui să fie suficient de ușor pentru a face față.

Cred că această metodă oferă o separare mai mică (care într-o bază de date vastă pe care o veți aprecia), în timp ce încă se face destul de ușor de gestionat. De asemenea, scriem scripturi Perl care fac o mulțime de prelucrare a acestor fișiere DDL, astfel încât aceasta ar putea fi o opțiune pentru o modalitate bună de a face față acestei situații.

0
adăugat

Dacă sunteți în căutarea unui instrument de automatizare, am lucrat de multe ori cu EMS SQLManager, care vă permite să generați automat un script ddl dintr-o bază de date.

Introducerea datelor în tabelele de referință ar putea fi obligatorie înainte de a pune baza de date pe linie. Acest lucru poate fi considerat chiar ca parte a scriptului ddl. De asemenea, EMS poate genera scripturi pentru inserții de date din bazele de date existente.

Este posibil ca necesitatea indexurilor să nu fie estimată în mod corespunzător la etapa ddl. Trebuie doar să le declarați pentru chei primare / străine. Alți indici ar trebui să fie creați mai târziu, odată ce au fost definite vederi și interogări

0
adăugat

Investește timpul să scrie un script generic "drop all constraints", deci nu trebuie să îl mențineți.

Un cursor cu privire la următoarele afirmații face truc.

Select * From Information_Schema.Table_Constraints 

Select * From Information_Schema.Referential_Constraints
0
adăugat

Cred că ideea de bază este bună.

Lucrul frumos de a construi mai întâi toate tabelele și apoi de a construi toate constrângerile este că mesele pot fi create în orice ordine. Când am făcut acest lucru am avut un fișier pe tabel, pe care l-am pus într-un director numit "Tables" și apoi un script care a executat toate fișierele din acel director. De asemenea, aveam un dosar pentru scripturile de constrângere (care aveau și chei străine și indici), executate atunci când s-au construit tabelele.

Aș separa construirea declanșatorilor și a procedurilor stocate și le execut ultima. Ideea despre acestea este că pot fi executate și re-executate pe baza de date fără a afecta datele. Aceasta înseamnă că le puteți trata la fel ca și codul obișnuit. Ar trebui să includeți declarațiile "dacă există ... drop" la începutul fiecărui declanșator și script de procedură, pentru ca acestea să poată fi reutilizabile.

Deci ordinea ar fi

  1. crearea tabelului
  2. adăugați indexuri
  3. adăugați constrângeri

Apoi

  1. adăugați declanșatoare
  2. adăugați procedurile memorate

Pe proiectele mele actuale folosim MSBuild pentru a rula scripturile. Există câteva ținte de extensie pe care le puteți obține pentru dvs., care vă permit să apelați script-uri SQL. În trecut am folosit perl, care a fost prea bine (și fișiere lot ... pe care nu aș recomanda - sunt prea limitate).

0
adăugat
De asemenea, am un mediu similar în care folosesc MSBuild pentru a controla execuția scriptului. De asemenea, îmi permite să includ script-uri de încărcare a datelor acolo unde este cazul. De exemplu, pot încărca datele de probă într-o copie de testare sau în demo a bazei de date.
adăugat autor bobs, sursa
Nu este întotdeauna atât de ușor, este posibil să ai o coloană calculată pe o masă, calculul se face într-o funcție. Cele mai multe funcții depind de tabele, dar tabelele cu coloane calculate depind de funcții. Deci, dacă încercați un drept "mese în primul rând, apoi constrângeri, apoi funcții apoi vizualizări" veți găsi aveți o problemă.
adăugat autor David Roussel, sursa

there is a neat tools that will iterate through the entire sql server and extract all the table, view, stored proceedures and UDF defintions to the local file system as SQL scripts (Text Files). I have used this with 2005 and 2008, not sure how it wil work with 2000 though. Check out http://www.antipodeansoftware.com/Home/Products

0
adăugat