Jak dokumentujesz swoje bazy danych?


202

Uważam, że większość moich klientów w ogóle nie dokumentuje swoich baz danych i uważam to za dość przerażające.Aby wprowadzić lepszą praktykę, chciałbym wiedzieć, jakich narzędzi/procesów używają ludzie.

  • Jak dokumentujesz swoją bazę danych?(SQL-Server)
  • Jakiego narzędzia używasz?
  • Format przechowywania dokumentacji dla schematu bazy danych/metadanych?
    • Dokumenty Word
    • Excel arkusz kalkulacyjny
    • Zwykły tekst
  • Proces dokumentacji lub zasady?

Nie mówię o inżynierii odwrotnej/dokumentowaniu istniejącej bazy danych, ale głównie o najlepszych praktykach dotyczących dokumentacji podczas tworzenia systemu/bazy danych.

+3

@TML: Jak powinna wyglądać * dokumentacja bazy danych *, możesz przeczytać w [Applied Mathematics for Database Professionals] (http://apress.com/book/view/1590597451) Lexa de Haana i Toona Koppelaarsa (przy okazji bardzo miła książka z mylącym tytułem), ale wątpię, aby (m) ludzie robili to w ten sposób. 18 sty. 112011-01-18 15:32:06

64

Używam rozszerzonych właściwości, ponieważ są bardzo elastyczne.Większość standardowych narzędzi do dokumentacji może być wyłączona MS_Description , a następnie można korzystać z własnych narzędzi niestandardowych.

Zobacz tę prezentację: #41-Get a Lever and Pick Any Turtle: Lifting with Metadata

I ten kod: http://code.google.com/p/caderoux/wiki/LeversAndTurtles

+2

Możesz coś zmienić i zapomnieć odpowiednio zmienić właściwości rozszerzone, czyniąc je niepoprawnymi.Czy możesz automatycznie wykryć takie rozbieżności? 25 mar. 132013-03-25 00:43:35

+1

Można przynajmniej zapytać schemat bazy danych (sys.tables/sys.columns) i lewe dołączyć do jego rozszerzonych właściwości (sys.extended_properties), aby zidentyfikować nieudokumentowane pola, a następnie przekształcić ten skrypt w test do uruchomienia podczas wdrażania. 18 lut. 162016-02-18 21:11:31


17

Jeśli kiedykolwiek zostanie napisany, dokumentacja składa się z dokumentu słownego.Zostanie dołączonych kilka diagramów relacji.Listy tabel i krótki opis tego, co zawiera każda tabela i jak odnosi się ona do innych tabel.Jeden rozdział dokumentacji zawiera ustawienia zabezpieczeń: jakie uprawnienia „użytkownik” potrzebuje aplikacja?

Ogólnie rzecz biorąc, w firmach, w których pracowałem, dokumentacja bazy danych jest zapisywana tylko wtedy, gdy klient wykonuje audyty, co zwykle ogranicza jej wykorzystanie do klientów finansowych i rządowych.

Zastrzeżenie: zbyt wielu programistów przyjmuje postawę, że kod jest dokumentacją , a ja też jestem winny tego.

+9

Duży problem, który znajduję w dokumentacji, która nie jest ściśle związana z kodem (np. Oddzielny dokument Word, w przeciwieństwie do automatycznie generowanego schematu schematu + dobrze nazwane obiekty bazy danych) jest taki, że ta dokumentacja gwarantuje, że źle się spisuje, ponieważ czas mija.Powód jest prosty: oddzielny dokument skutecznie powiela informacje.Bez * zautomatyzowanego * sposobu na utrzymanie synchronizacji ze źródłem, szybko stanie się przestarzały.Porównaj to z narzędziem, które generuje schemat schematu na żywo z bazy danych i pobiera odpowiednie komentarze z kodu. 19 sie. 112011-08-19 20:24:40


50

Microsoft Visio Pro (do Visio 2010) może inżynierii wstecznej bazy danych, podobnie jak CA ERwin .Visio jest tańszą opcją, ale ERwin jest bardziej szczegółową, bardziej kompletną opcją.Rozszerzone właściwości są miłe, jeśli ludzie chcą się im przyjrzeć.Można również użyć czegoś takiego jak SQL Doc Red Gate, aby wydrukować dokumentację w formacie HTML.

Znajduję konwencje nazewnictwa i prawidłowe ustawienie kluczy obcych prowadzi doprawiesamodokumentująca się baza danych.Nadal powinieneś mieć kilka zewnętrznych dokumentów dla lepszego zrozumienia celu.

  0

Czego często brakuje prostemu schematowi (nawet w dobrze nazwanej i obcej bazie danych) to opisy pól.To niezwykłe, że wszystkie pola są wystarczająco proste, aby pasowały do ​​nazwy kolumny. 17 maj. 162016-05-17 19:54:18


21

Wypróbuj SchemaSpy: http://schemaspy.sourceforge.net/


18

Spójrz na SchemaCrawler - to moje darmowe narzędzie wiersza polecenia, które zaprojektowałem, aby robić to, czego szukasz.SchemaCrawler tworzy plik tekstowy ze wszystkimi obiektami schematu bazy danych.To wyjście tekstowe zostało zaprojektowane tak, aby było zarówno czytelne dla człowieka, jak i porównywalne z podobnym wyjściem z innego serwera.

W praktyce odkryłem, że wyświetlanie pliku tekstowego schematu bazy danych jest przydatne, gdy jest wykonywane jako część kompilacji.W ten sposób możesz sprawdzić plik tekstowy w systemie kontroli kodu źródłowego i mieć historię wersji tego, jak ewoluował Twój schemat w czasie.SchemaCrawler jest również zaprojektowany do automatyzacji tego procesu z poziomu wiersza poleceń.


10

Zabawne, zastanawiałem się, jak robią to inni ludzie.

Podczas opracowywania mojego pierwszego dużego projektu bazy danych odkryłem, że Microsoft SQL Server Management Studio 10.0.1600.22 obsługuje diagramy baz danych, które można wyeksportować do dokumentu programu Word lub innego oprogramowania dokumentacyjnego, w którym można dodać dowolną ilość szczegółów dokumentacji.Wystarczy rozwinąć bazę danych, z którą połączono program SQL Management Studio, i kliknąć prawym przyciskiem myszy „diagramy bazy danych” w eksploratorze obiektów i wybrać „Nowy schemat bazy danych”, aby wygenerować interaktywny diagram, który pokaże wszystkie relacje między różnymi tabelami.Możesz nawet określić, które tabele chcesz dołączyć do diagramów, aby obraz nie stał się nieprzyjemny, jeśli próbujesz go udokumentować kawałek po kawałku.Eksportuj obraz do dowolnego innego oprogramowania do edycji i komentuj tyle, ile chcesz.

Polecam również dużo/komentarzy/w skrypcie, który generuje twoją bazę danych.

Ogólnie rzecz biorąc, jest dużo pracy, zapisując, po co jest wszystko, ale dobry pomysł na dłuższą metę, na przykład, gdy ty lub inna biedna dusza wróci, aby zaktualizować swój projekt kilka lat później!:)

+1

Nie używam diagramów SQL Server, ponieważ ograniczenia klucza obcego są po prostu łączone gdzieś z tabelami, tak jak w [diagramach ER] (https://en.wikipedia.org/wiki/Entity%E2%80 % 93relationship_model).Wolę mieć złącza łączące pola klucza podstawowego i obcego. 15 lip. 162016-07-15 11:43:39


19

Dla SQL Server używam rozszerzonych właściwości.

Za pomocą następującego skryptu PowerShell mogę wygenerować skrypty tworzenia tabeli dla pojedynczej tabeli lub dla wszystkich tabel w schemacie dbo.

Skrypt zawiera komendę Create table , klucze podstawowe i indeksy.Klucze obce są dodawane jako komentarze. Rozszerzone właściwości tabel i kolumn tabeli są dodawane jako komentarze.Tak, obsługiwane są właściwości wielu linii.

Skrypt jest dostosowany do mojego osobistego stylu kodowania.

  • brak indywidualnych zestawień dla pojedynczych kolumn.

  • obecnie wymaga Sql ServerAuthentication.

Oto kompletny kod, który zmienia rozszerzone właściwości w dobry zwykły stary dokument ASCII (BTW to poprawne sql do odtworzenia tabel)

function Get-ScriptForTable
{
   param (
    $server,$ dbname,
    $user,$ password,
    $filter
   )

[System.reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | out-null$ conn = new-object "Microsoft.SqlServer.Management.Common.ServerConnection" 
 $conn.ServerInstance =$ server
 $conn.LoginSecure =$ false
 $conn.Login =$ user
 $conn.Password =$ password
 $conn.ConnectAsUser =$ false
 $srv = New-Object "Microsoft.SqlServer.Management.Smo.Server"$ conn

 $Scripter = new-object ("Microsoft.SqlServer.Management.Smo.Scripter")
#$ Scripter.Options.DriAll = $false$ Scripter.Options.NoCollation = $True$ Scripter.Options.NoFileGroup = $true$ scripter.Options.DriAll = $True$ Scripter.Options.IncludeIfNotExists = $False$ Scripter.Options.ExtendedProperties = $false$ Scripter.Server = $srv$ database = $srv.databases[$ dbname]
 $obj =$ database.tables

 $cnt = 1$ obj | % {

   if (! $filter -or$ _.Name -match $filter)
  {$ lines = @()
    $header = "----------{0, 3}{1, -30}----------" -f$ cnt, $_.Name
    Write-Host$ header 

    "/* ----------------- {0, 3} {1, -30} -----------------" -f $cnt,$ _.Name
    foreach( $i in$ _.ExtendedProperties)
    {
     "{0}: {1}" -f $i.Name,$ i.value
    }
    ""
    $colinfo = @{}
    foreach($ i in $_.columns)
   {$ info = ""
     foreach ( $ep in$ i.ExtendedProperties)
     {
      if ( $ep.value -match "'n")
     {
       "----- Column:{0}{1}-----" -f$ i.name, $ep.name$ ep.value
      }
      else
      {
       $info += "{0}:{1}" -f$ ep.name, $ep.value
      }
     }
     if ($ info)
     {
      $colinfo[$ i.name] = $info
     }
    }
    ""
    "SELECT COUNT(*) FROM{0}" -f$ _.Name
    "SELECT * FROM {0} ORDER BY 1" -f $_.Name
    "---------------------{0, 3}{1, -30}----------------- */" -f$ cnt, $_.Name
    ""$ raw = $Scripter.Script($ _)
    #Write-host $raw$ cont = 0
    $skip =$ false 
    foreach ( $line in$ raw -split "\r\n")
    {
     if ( $cont -gt 0)
    {
      if ($ line -match "^\)WITH ")
      {
       $line = ")"
      }$ linebuf += ' ' + $line -replace " ASC", ""$ cont--
      if ( $cont -gt 0){ continue }
     }
     elseif ($ line -match "^ CONSTRAINT ")
     {
      $cont = 3$ linebuf = $line
      continue
     }
     elseif ($ line -match "^UNIQUE ")
     {
      $cont = 3$ linebuf = $line$ skip = $true
      continue
     }
     elseif ($ line -match "^ALTER TABLE.*WITH CHECK ")
     {
      $cont = 1$ linebuf = "-- " + $line
      continue
     }
     elseif ($ line -match "^ALTER TABLE.* CHECK ")
     {
      continue
     }
     else
     {
      $linebuf =$ line
     }
     if ( $linebuf -notmatch "^SET ")
    {
      if ($ linebuf -match "^\)WITH ")
      {
       $lines += ")"
      }
      elseif ($ skip)
      {
       $skip =$ false
      }
      elseif ( $linebuf -notmatch "^\s*$ ")
      {
       $linebuf =$ linebuf -replace "\]|\[", ""
       $comment =$ colinfo[( $linebuf.Trim() -split " ")[0]]
       if ($ comment) { $comment = ' -- ' +$ comment }
       $lines +=$ linebuf + $comment
      }
     }
    }$ lines += "go"
    $lines += ""$ block = $lines -join "'r'n"$ block
    $cnt++$ used = $false
    foreach($ i in $_.Indexes)
   {$ out = ''
     $raw =$ Scripter.Script( $i)
     #Write-host$ raw
     foreach ( $line in$ raw -split "\r\n")
     {
      if ( $line -match "^\)WITH ")
     {$ out += ")"
      }
      elseif ( $line -match "^ALTER TABLE.* PRIMARY KEY")
     {
       break
      }
      elseif ($ line -match "^ALTER TABLE.* ADD UNIQUE")
      {
       $out +=$ line -replace "\]|\[", "" -replace " NONCLUSTERED", "" 
      }
      elseif ( $line -notmatch "^\s*$ ")
      {
       $out +=$ line -replace "\]|\[", "" -replace "^\s*", "" '
       -replace " ASC,", ", " -replace " ASC $", "" '
       <#-replace "\bdbo\.\b", "" #> '
       -replace " NONCLUSTERED", "" 
      }$ used = $true
     }$ block = " $out;'r'ngo'r'n"$ out
    }
    if ($used)
    {
     "go"
    }
   }
} 
}

Możesz albo wykonać skrypt kompletnego schematu dbo danej bazy danych

Get-ScriptForTable 'localhost' 'MyDB' 'sa' 'toipsecret' | Out-File "C:\temp\Create_commented_tables.sql"

Lub filtr dla pojedynczej tabeli

Get-ScriptForTable 'localhost' 'MyDB' 'sa' 'toipsecret' 'OnlyThisTable'

9

Używam rozszerzonych właściwości i Red Gates SQL Doc.Działa bardzo dobrze!


7

DB Dictionary Creator

to narzędzie do dokumentacji bazy danych o otwartym kodzie źródłowym z przyzwoitym interfejsem GUI i opcjami eksportu/importu.Używa właściwości rozszerzonych do przechowywania dokumentacji.Generuje również automatyczne opisy kolumn klucza podstawowego i kolumn klucza obcego.

+1

wymaga .NET Framework 4.0 i działa tylko z SQL Server i SQL Express 07 paź. 122012-10-07 15:55:26


9

Używam narzędzi do modelowania danych, ponieważ pozwalają mi dokumentować ważne informacje o bazie danych, inne niż te, które pasują do bazy danych.Metadane, takie jak kwestie prywatności/bezpieczeństwa/wrażliwości, zarządzanie, zarządzanie itp.

Może to wykraczać poza to, co jest potrzebne do dokumentowania bazy danych, ale te rzeczy są ważne dla firmy i pomagają im zarządzać danymi.

Narzędzia formalne pomagają mi również w zarządzaniu danymi przechowywanymi w więcej niż jednej bazie danych/instancji/serwerze.To nigdy nie było bardziej prawdziwe niż w naszym świecie aplikacji pakietowych.


5

Rzeczywiście, rozszerzone właściwości (MS_Description) są dobrym rozwiązaniem.Mając te opisy łatwo dostępne jako część metadanych, mogą być wykorzystywane nie tylko przez generatorów dokumentów, ale także (miejmy nadzieję, że pewnego dnia) za pomocą narzędzi dostarczających „intellisense”, na przykład doskonałego Asystenta SQL http://www.softtreetech.com/isql.htm (ostatni raz sprawdzałem, że nie) lub wbudowany w Intellisense SQL Sever Management Studio (od sql2008)

Wierzę również, że devs i DBA powinni mieć możliwość dodania tych notatek, ponieważ Tangurena i Nick Chammas poprawnie wskazali - devs bardzo niechętnie aktualizują dokumenty i nienawidzą duplikatów pracy - co jest wystarczające zwłaszcza dla osoby, która została nauczona optymalizować rzeczy przez całe życie zawodowe.Jeśli więc nie jest łatwo zaktualizować dokumenty w jednym miejscu blisko kodu źródłowego - to nie zadziała.W pewnym momencie przeszukałem sieć i nie znalazłem rozwiązania tego problemu, więc napisałem LiveDoco (nie za darmo, przepraszam), aby ułatwić to zadanie.Więcej informacji tutaj, jeśli http://www.livedoco.com/why-livedoco zainteresowany: http://www.livedoco.com/why-livedoco


10

Ustawiam rozszerzoną właściwość MS_description dla wszystkich obiektów, a następnie dokumentuję całą bazę danych za pomocą ApexSQL Doc do tworzenia dokumentów HTML wcześniej, ale ostatnio wolę PDF


5

Możesz również spojrzeć na wsSqlSrvDoc .To miłe małe narzędzie, które współpracuje z rozszerzonymi właściwościami SQL Server i tworzy dokument MS Word.

Wydruk wszystkich właściwości kolumn (z relacjami klucza obcego) działa po wyjęciu z pudełka.W celu uzyskania dalszych opisów w każdym polu należy skonfigurować rozszerzone właściwości tych kolumn w SQL Server Management Studio.

To nie jest darmowe, ale całkiem przystępne.Jeśli po prostu musisz utworzyć dokumentację dla bazy danych „nie działa w toku”, która jest mniej lub bardziej skończona, wystarczyłoby, aby skorzystać z bezpłatnej wersji próbnej.

Tool Website


8

W przypadku dokumentacji serwera sql bardzo polecam niedawno wydany:

SQL Server & Windows Documentation Using Windows PowerShellnapisane przez Kendala Van Dyke

Krótki opis z linku:

SQL Power Doc to zbiór skryptów i modułów Windows PowerShell, które wykrywają, dokumentują i diagnozują wystąpienia SQL Server oraz ich podstawowe konfiguracje systemu operacyjnego i komputera z systemem Windows. SQL Power Doc współpracuje ze wszystkimi wersjami SQL Server od SQL Server 2000 do 2012 oraz wszystkich wersji Windows Server i konsumenckich systemów operacyjnych Windows z Windows 2000 i Windows XP przez Windows Server 2012 i Windows 8. SQL Power Doc może również dokumentować Bazy danych SQL systemu Windows Azure.


2

Używamy Dataedo do tworzenia słownika danych, procedur składowanych dokumentów i funkcji.Wklejamy ERD utworzone w Visio.Cała dokumentacja jest przechowywana w repozytorium metadanych Dataedo (sformatowany tekst) i eksportujemy go do HTML do użytku wewnętrznego lub eksportujemy do PDF dla drukowanego dokumentu.

Każdemu obiektowi przypisujemy moduł i przypisujemy każdy moduł do osoby.Dataedo zawiera raportowanie statusu dokumentacji, dzięki czemu możemy stwierdzić, czy istnieje nowa kolumna lub tabela, którą należy udokumentować.