Bagaimana anda dokumen database anda?

Saya menemukan bahwa sebagian besar klien saya tidak mendokumentasikan database mereka sama sekali dan saya menemukan itu cukup menakutkan. Untuk memperkenalkan beberapa praktek yang lebih baik, saya ingin tahu apa alat/proses orang-orang yang menggunakan.

  • Bagaimana anda dokumen database anda? (SQL Server)
  • Apa alat yang anda gunakan?
  • Dokumentasi Format Penyimpanan untuk skema database/meta-data?
  • Dokumen Word
  • Excel spreadsheet
  • Plain Text
  • Dokumentasi proses atau kebijakan?

Saya tidak berbicara tentang reverse engineering / dokumen yang ada di database, tapi terutama pada dokumentasi praktek-praktek terbaik saat anda mengembangkan sistem/database.

Saya telah menggunakan properti diperpanjang karena mereka sangat fleksibel. Paling standar alat dokumentasi yang dapat didorong dari MS_Description, dan kemudian anda dapat menggunakan anda sendiri dengan custom built-in tools.

Melihat presentasi ini: #41-Dapatkan Tuas dan Memilih kura-Kura: Mengangkat dengan Metadata

Dan kode ini: http://code.google.com/p/caderoux/wiki/LeversAndTurtles

Komentar (2)

Microsoft's Visio Pro (sampai dengan Visio 2010) dapat merekayasa sebuah database dapat CA's ERwin. Visio adalah pilihan yang lebih murah, tapi ERwin adalah yang lebih rinci, lebih lengkap pilihan. Extended properties yang bagus, jika orang-orang repot-repot untuk melihat mereka. Anda juga bisa menggunakan sesuatu seperti Red Gate's SQL Doc untuk output dokumentasi dalam format HTML.

Saya menemukan konvensi penamaan dan benar menyiapkan kunci asing menyebabkan hampir mendokumentasikan diri database. Anda masih harus memiliki beberapa dokumen eksternal untuk pemahaman yang lebih baik dari tujuan.

Komentar (1)
Komentar (0)

Untuk SQL Server I'm menggunakan extended properties.

Dengan Script PowerShell berikut saya dapat menghasilkan script untuk Membuat Tabel tabel tunggal atau untuk semua tabel dalam skema dbo.

Naskah berisi Create table perintah, kunci primer dan indeks. Kunci asing yang ditambahkan sebagai komentar. Extended properties dari tabel dan kolom tabel yang ditambahkan sebagai komentar. Ya multi baris sifat yang didukung.

Script disetel untuk saya pribadi coding style.

  • tidak ada individu collations untuk satu kolom.

  • saat ini membutuhkan Sql Server Otentikasi.

Berikut ini adalah kode lengkap untuk mengubah properti diperpanjang menjadi baik tua polos ASCII dokumen (BTW itu berlaku sql untuk menciptakan 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 " NONCLUSTERED", "" 
                }
                $used = $true
            }
            $block = "$out;`r`ngo`r`n"
            $out
        }
        if ($used)
        {
            "go"
        }
    }
} 
}

Anda dapat script thecomplete dbo skema database tertentu

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

Atau filter untuk satu tabel

Get-ScriptForTable 'localhost'  'MyDB' 'sa' 'toipsecret' 'OnlyThisTable'
Komentar (0)

Lihatlah SchemaCrawler - ini adalah gratis, alat baris perintah yang saya dirancang untuk melakukan apa yang anda cari. SchemaCrawler menghasilkan sebuah file teks dengan semua skema database objek. Output teks ini dirancang untuk menjadi mudah dibaca, serta diff-mampu melawan mirip output dari server lain.

Dalam prakteknya, apa yang saya temukan adalah bahwa keluaran file teks dari skema database yang berguna, bila dilakukan sebagai bagian dari membangun. Dengan cara ini, anda dapat memeriksa file teks ke kode sumber sistem kontrol, dan memiliki versi sejarah bagaimana skema anda telah berevolusi dari waktu ke waktu. SchemaCrawler dirancang untuk mengotomatisasi ini juga, dari command-line.

Komentar (0)

Jika hal ini pernah tertulis, dokumentasi terdiri dari dokumen word. Beberapa relationship diagram akan disertakan. Daftar tabel dan deskripsi singkat dari apa yang masing-masing tabel memegang dan bagaimana hal ini berhubungan dengan tabel lain. Salah satu bab dari dokumentasi meliputi pengaturan keamanan: apa izin tidak "user" bahwa aplikasi membutuhkan?

Umumnya, di perusahaan saya've bekerja, database dokumentasi hanya akan ditulis ketika pelanggan adalah orang yang melakukan audit, yang cenderung untuk membatasi penggunaannya untuk keuangan dan pelanggan pemerintah.

Disclaimer: terlalu banyak pengembang mengambil sikap yang kode adalah dokumentasi, dan I've telah bersalah itu juga.

Komentar (1)

Saya menggunakan extended properties dan Gerbang Merah SQL Doc. Bekerja sangat baik!

Komentar (0)

Lucu, aku bertanya-tanya bagaimana orang lain akan melakukan ini juga..

Sambil mengembangkan besar pertama saya database proyek, saya menemukan bahwa Microsoft SQL Server Management Studio 10.0.1600.22 mendukung database diagram yang dapat anda ekspor ke dokumen word atau lainnya dokumentasi perangkat lunak di mana anda dapat menambahkan lebih banyak dokumentasi yang detail seperti yang anda inginkan. Hanya memperluas database anda terhubung ke SQL Management Studio dan klik kanan pada "diagram database" di object explorer dan pilih "New Database Diagram" untuk menghasilkan diagram interaktif yang akan menampilkan semua hubungan antara tabel yang berbeda. Anda bahkan dapat menentukan tabel mana yang ingin anda sertakan dalam diagram, sehingga gambar tidak mendapatkan unweildly jika anda hanya mencoba untuk dokumen itu sepotong demi sepotong. Mengekspor gambar ke perangkat lunak editing lain dan komentar sebanyak yang anda inginkan.

Saya juga merekomendasikan banyak /komentar/ dalam naskah yang menghasilkan database anda.

Umumnya hal ini banyak pekerjaan menuliskan apa itu semua, tapi ide yang baik untuk jangka panjang, seperti ketika anda atau beberapa jiwa miskin datang kembali untuk update kreasi anda beberapa tahun kemudian! :)

Komentar (1)

Aku mengatur MS_description diperpanjang properti untuk semua benda-benda dan kemudian mendokumentasikan seluruh database menggunakan ApexSQL Doc. Aku digunakan untuk membuat dokumen HTML sebelumnya, tapi akhir-akhir ini aku sukai PDF

Komentar (0)

Saya menggunakan pemodelan data sesuai karena mereka memungkinkan saya untuk mendokumentasikan informasi penting tentang database yang lain dari apa yang "pas" dalam database. Meta data seperti privasi/keamanan/sensitivitas keprihatinan, kepedulian, pemerintahan, dll.

Yang mungkin melampaui apa yang perlu di mendokumentasikan database, tetapi hal-hal yang penting untuk bisnis dan membantu mereka mengelola data mereka.

Formal alat ini juga membantu saya dalam mengelola data yang disimpan di lebih dari satu database/contoh/server. Ini belum pernah lebih benar dari pada kami dikemas aplikasi dunia.

Komentar (0)

DB Kamus Pencipta

adalah open source database alat dokumentasi dengan layak GUI dan pilihan ekspor / impor. Menggunakan Extended properties untuk menyimpan dokumentasi. It'll juga menghasilkan otomatis deskripsi untuk kolom primary key dan foreign key kolom.

Komentar (1)

Untuk Mendokumentasikan sql server, saya sangat merekomendasikan hanya baru-baru ini dirilis :

SQL Server & Dokumentasi Windows Menggunakan Windows PowerShell ditulis oleh Kendal Van Dyke

Deskripsi singkat dari link :

SQL Daya Doc adalah kumpulan Windows PowerShell script dan modul-modul yang discover, dokumen, dan mendiagnosa SQL contoh Server dan mereka mendasari OS Windows & konfigurasi mesin. SQL Daya Doc bekerja dengan semua versi dari SQL Server dari SQL Server 2000 hingga tahun 2012, dan semua versi Windows Server dan konsumen Sistem Operasi Windows dari Windows 2000 dan Windows XP hingga Windows Server 2012 dan Windows 8. SQL Daya Doc juga mampu mendokumentasikan Windows Azure SQL Database.

Komentar (0)

Memang, Extended Properties (MS_Description) adalah cara untuk pergi. Setelah penjelasan ini tersedia sebagai bagian dari metadata yang dapat dimanfaatkan tidak hanya oleh docs generator tetapi juga (mudah-mudahan satu hari) dengan alat-alat yang memberikan "intellisense" misalnya setiap Softtree's SQL Asisten http://www.softtreetech.com/isql.htm (terakhir kali aku memeriksa mereka didn't) atau dibangun di SQL Server Management Studio's Intellisense (sejak sql2008)

Saya juga percaya itu harus mudah untuk devs dan DBA's untuk menambahkan catatan ini karena sebagai Tangurena dan Nick Chammas benar menunjuk - devs sangat enggan untuk menjaga dokumen diperbarui dan membenci duplikat kerja yang cukup adil terutama bagi orang yang mengajarkan untuk mengoptimalkan hal-hal yang selama seluruh kehidupan profesional. Jadi kecuali's benar-benar mudah untuk memperbarui dokumen dalam satu tempat yang dekat dengan sumber kode ini isn't akan bekerja. Di beberapa titik saya mencari di web dan tidak't menemukan solusi untuk ini, jadi saya menulis LiveDoco (tidak gratis, maaf) dalam upaya untuk membuatnya mudah. Info lebih lanjut di sini jika tertarik: http://www.livedoco.com/why-livedoco

Komentar (0)

Anda juga bisa lihat di wsSqlSrvDoc. It's sebuah aplikasi yang bekerja dengan SQL Server diperpanjang sifat dan menciptakan dokumen MS Word.

Print-out dari semua kolom properties (dengan hubungan kunci asing) yang bekerja di luar kotak. Untuk deskripsi lebih lanjut pada bidang masing-masing anda harus mengatur properti diperpanjang dari kolom tersebut di SQL Server Management Studio.

It's tidak gratis tapi cukup terjangkau. Jika anda hanya perlu untuk membuat dokumentasi untuk "tidak work in progress" DB yang's lebih atau kurang selesai dari itu akan cukup untuk menggunakan percobaan gratis.

Alat Web

Komentar (0)

Kami menggunakan Dataedo untuk membuat kamus data, dokumen disimpan prosedur dan fungsi. Kita paste ERDs dibuat di Visio. Semua dokumentasi disimpan dalam Dataedo metadata repositori (teks yang diformat) dan kita ekspor ke HTML untuk penggunaan internal atau ekspor ke PDF untuk cetak dokumen.

Kami menetapkan setiap objek untuk modul dan menetapkan masing-masing modul untuk seseorang. Dataedo dilengkapi dengan dokumentasi status pelaporan sehingga kita bisa tahu jika ada kolom baru atau tabel yang perlu didokumentasikan.

Komentar (0)

Anda dapat menggunakan regular ---diawali komentar di .sql file.

Manfaat mencakup bahwa dokumentasi adalah dengan kode untuk skema database, dan anda dapat dengan mudah melakukan itu untuk sistem kontrol versi seperti Git.

Contoh:

-- Table to store details about people.
-- See also: The customer table.
-- Note: Keep this data safe!
-- Todo: Add a email column.
CREATE TABLE Persons ( -- People in the registry
    PersonID int,
    LastName varchar(255), -- The person's last name
    FirstName varchar(255), -- The person's first name
    Address varchar(255), -- Address of residence
    City varchar(255) -- City of residence
);

Mungkin anda bisa menggunakan XML juga.

-- 
-- Table to store details about people.
-- 
-- The id column.
-- The person's last name.
-- The person's first name.
-- Address of residence.
-- City of residence.
CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);

Anda juga bisa menggunakan beberapa sintaks dengan kemiripan jsDoc/phpDoc.

-- Table to store details about people.
-- @column {int} PersonID - The id column.
-- @column {varchar} LastName - The person's last name.
-- @column {varchar} FirstName - The person's first name.
-- @column {varchar} Address - Address of residence.
-- @column {varchar} City - City of residence.
-- @see {@link https://example.com/|Example}
-- @author Jane Smith 
-- @copyright Acme 2018
-- @license BSD-2-Clause
-- @todo Add a column for email address.
-- @since 1.0.1
-- @version 1.2.3
CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);

Atau anda bisa menggunakan MarkDown syntax.

-- # Persons
-- Table to store details about **people**.
-- * `PersonID` - The id column.
-- * `LastName` - The person's _last_ name.
-- * `FirstName` - The person's _first_ name.
-- * `Address` - Address of residence.
-- * `City` - City of residence.
--
-- [I'm an inline-style link](https://www.example.com/)
--
-- | PersonID | LastName | FirstName | Address | City |
-- | ---------| -------- | --------- | ------- | ---- |
-- | 1        | Smith    | Jane      | N/A     | N/A  |
CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);
Komentar (0)

ERD Diagram (Diagram Database) selalu yang paling berguna untuk tim saya

Tapi ada aturan untuk menulis "Keterangan" di Properti setiap tabel dan kolom yang kita buat.

Kemudian kami menggunakan software yang namanya Enterprise Architect untuk dokumen Tabel dengan Indeks , Kunci Asing Dan Kolom dengan Jenis dan Deskripsi.

Komentar (0)

Untuk MySQL secara khusus, kami selalu menggunakan MySQL Workbench. Kita buat database kami desain desainer, kemudian mengekspornya sebagai runnable SQL script. Menerapkan semua perubahan dalam desain dan kemudian menjalankan skrip yang dihasilkan memastikan bahwa desain dan aktual database sempurna sinkron dengan satu sama lain, dan bahwa dokumentasi tidak akan menjadi usang dengan mudah.

Komentar (0)