Làm thế nào để bạn tài liệu cơ sở dữ liệu của bạn?


202

Tôi thấy rằng hầu hết các khách hàng của tôi hoàn toàn không ghi lại cơ sở dữ liệu của họ và tôi thấy điều đó khá đáng sợ.Để giới thiệu một số thực hành tốt hơn, tôi muốn biết những công cụ/quy trình mọi người đang sử dụng.

  • Làm thế nào để bạn tài liệu cơ sở dữ liệu của bạn?(Máy chủ SQL)
  • Bạn sử dụng công cụ gì?
  • Định dạng lưu trữ tài liệu cho lược đồ cơ sở dữ liệu/siêu dữ liệu?
    • Tài liệu Word
    • bảng tính Excel
    • Văn bản thô
  • Quy trình tài liệu hay chính sách?

Tôi không nói về kỹ thuật đảo ngược/tài liệu cơ sở dữ liệu hiện có, mà chủ yếu là về tài liệu thực hành tốt nhất trong khi bạn phát triển hệ thống/cơ sở dữ liệu của bạn.

+3

@TML: Tài liệu cơ sở dữ liệu * nên * trông như thế nào, bạn có thể đọc trong [Toán học ứng dụng cho chuyên gia cơ sở dữ liệu] (http://apress.com/book/view/1590597451) của Lex de Haan và Toon Koppelaars (bằng cách a cuốn sách rất hay với một tiêu đề sai lệch), nhưng tôi nghi ngờ rằng (m) bất kỳ người nào làm theo cách này. 18 jan. 112011-01-18 15:32:06

64

Tôi đã sử dụng các thuộc tính mở rộng vì chúng rất linh hoạt.Hầu hết các công cụ tài liệu tiêu chuẩn có thể được điều khiển MS_Description , và sau đó bạn có thể sử dụng công cụ của riêng mình với các công cụ được tạo tùy chỉnh.

Xem bản trình bày này: #41-Get a Lever and Pick Any Turtle: Lifting with Metadata

Và mã này: http://code.google.com/p/caderoux/wiki/LeversAndTurtles

+2

Bạn có thể thay đổi một cái gì đó và quên thay đổi thuộc tính mở rộng của mình cho phù hợp, khiến chúng không chính xác.Bạn có thể tự động phát hiện sự khác biệt như vậy? 25 mar. 132013-03-25 00:43:35

+1

Ít nhất, người ta có thể truy vấn lược đồ cơ sở dữ liệu (sys.tables/sys.columns) và tham gia vào các thuộc tính mở rộng của nó (sys.extends_properies) để xác định các trường không có tài liệu, sau đó biến tập lệnh đó thành một bài kiểm tra để chạy khi triển khai. 18 feb. 162016-02-18 21:11:31


17

Nếu nó được viết, tài liệu này bao gồm một tài liệu từ.Một vài sơ đồ mối quan hệ sẽ được bao gồm.Danh sách các bảng và mô tả ngắn gọn về những gì mỗi bảng giữ và cách nó liên quan đến các bảng khác.Một chương của tài liệu bao gồm các cài đặt bảo mật: "người dùng" mà ứng dụng cần có quyền gì?

Nói chung, trong các công ty tôi từng làm việc, tài liệu cơ sở dữ liệu chỉ được viết khi khách hàng là người thực hiện kiểm toán, có xu hướng giới hạn sử dụng đối với khách hàng tài chính và chính phủ.

Tuyên bố miễn trừ trách nhiệm: quá nhiều nhà phát triển có thái độ rằng mã là tài liệu và tôi cũng đã phạm tội.

+9

Một vấn đề lớn mà tôi tìm thấy với tài liệu không bị ràng buộc chặt chẽ với mã (ví dụ: một tài liệu Word riêng, trái ngược với sơ đồ lược đồ được tạo tự động + các đối tượng cơ sở dữ liệu được đặt tên tốt) là tài liệu này được đảm bảo không bị sai như Thơi gian trôi.Lý do rất đơn giản: một tài liệu riêng biệt sao chép thông tin một cách hiệu quả.Nếu không có cách * tự động * để giữ cho nó đồng bộ với nguồn, nó sẽ trở nên lỗi thời rất nhanh.So sánh điều này với một công cụ tạo sơ đồ lược đồ trực tiếp từ cơ sở dữ liệu và lấy các nhận xét thích hợp từ bên trong mã. 19 aug. 112011-08-19 20:24:40


50

Visio Pro của Microsoft (lên đến Visio 2010) có thể đảo ngược cơ sở dữ liệu như ERwin của ERwinVisio là tùy chọn rẻ hơn, nhưng ERwin là tùy chọn chi tiết hơn, đầy đủ hơn.Tài sản mở rộng là tốt đẹp, nếu mọi người bận tâm để xem xét chúng.Bạn cũng có thể sử dụng một cái gì đó như SQL Doc của Red Gate để xuất tài liệu ở định dạng HTML.

Tôi thấy các quy ước đặt tên và thiết lập đúng các khóa ngoại dẫn đến mộthầu hếtcơ sở dữ liệu tự.Bạn vẫn nên có một số tài liệu bên ngoài để hiểu rõ hơn về mục đích.

  0

Điều mà một lược đồ đơn giản thường bị thiếu (ngay cả trong cơ sở dữ liệu có tên và khóa ngoài) là các mô tả về các trường.Theo kinh nghiệm của tôi, thật bất thường khi tất cả các trường đủ đơn giản để khớp với tên cột. 17 may. 162016-05-17 19:54:18


21

Hãy thử SchemaSpy: http://schemaspy.sourceforge.net/


18

Hãy xem SchemaCrawler - đây là công cụ dòng lệnh miễn phí của tôi mà tôi đã thiết kế để làm những gì bạn đang tìm kiếm.SchemaCrawler tạo ra một tệp văn bản với tất cả các đối tượng lược đồ cơ sở dữ liệu.Đầu ra văn bản này được thiết kế để có thể đọc được cả con người, cũng như có thể chống lại đầu ra tương tự từ một máy chủ khác.

Trong thực tế, những gì tôi đã tìm thấy là việc xuất ra một tệp văn bản của lược đồ cơ sở dữ liệu là hữu ích, khi được thực hiện như một phần của bản dựng.Bằng cách này, bạn có thể kiểm tra tệp văn bản vào hệ thống kiểm soát mã nguồn của mình và có lịch sử phiên bản về cách lược đồ của bạn đã phát triển theo thời gian.SchemaCrawler được thiết kế để tự động hóa điều này, từ dòng lệnh.


10

Thật buồn cười, tôi đã tự hỏi làm thế nào những người khác cũng làm điều này ..

Trong khi phát triển dự án cơ sở dữ liệu lớn đầu tiên của mình, tôi thấy rằng Microsoft SQL Server Management Studio 10.0.1600.22 hỗ trợ các sơ đồ cơ sở dữ liệu mà bạn có thể xuất thành tài liệu từ hoặc phần mềm tài liệu khác nơi bạn có thể thêm chi tiết tài liệu như bạn muốn.Chỉ cần mở rộng cơ sở dữ liệu mà bạn đã kết nối trên SQL Management Studio và nhấp chuột phải vào "sơ đồ cơ sở dữ liệu" trong trình thám hiểm đối tượng và chọn "Sơ đồ cơ sở dữ liệu mới" để tạo sơ đồ tương tác sẽ hiển thị tất cả các mối quan hệ giữa các bảng khác nhau.Bạn thậm chí có thể chỉ định những bảng nào bạn muốn đưa vào sơ đồ, để hình ảnh không bị rối nếu bạn chỉ cố gắng ghi lại từng mảnh một.Xuất hình ảnh sang bất kỳ phần mềm chỉnh sửa nào khác và bình luận nhiều như bạn muốn.

Tôi cũng đề xuất nhiều/bình luận/trong tập lệnh tạo cơ sở dữ liệu của bạn.

Nói chung, có rất nhiều công việc viết ra tất cả những gì nó làm, nhưng một ý tưởng tốt về lâu dài, chẳng hạn như khi bạn hoặc một linh hồn đáng thương nào đó quay lại để cập nhật sáng tạo của bạn một vài năm sau đó!:)

+1

Tôi không sử dụng sơ đồ SQL Server, vì các ràng buộc khóa ngoài chỉ được kết nối ở đâu đó với các bảng, giống như được thực hiện trong [sơ đồ ER] (https://en.wikipedia.org/wiki/Entity%E2%80 % 93 mối quan hệ_model).Tôi thích có các kết nối kết nối các trường khóa chính và nước ngoài. 15 jul. 162016-07-15 11:43:39


19

Đối với SQL Server, tôi đang sử dụng các thuộc tính mở rộng.

Với Tập lệnh PowerShell sau đây, tôi có thể tạo tập lệnh Tạo bảng cho một bảng hoặc cho tất cả các bảng trong lược đồ dbo.

Kịch bản chứa lệnh Create table , khóa chính và chỉ mục.Khóa ngoại được thêm dưới dạng nhận xét. Các thuộc tính mở rộng của bảng và cột bảng được thêm dưới dạng nhận xét.Có nhiều thuộc tính được hỗ trợ.

Kịch bản được điều chỉnh theo phong cách mã hóa cá nhân của tôi.

  • không có đối chiếu riêng lẻ cho các cột đơn.

  • hiện tại nó yêu cầu Sql ServerAuthentication.

Đây là mã hoàn chỉnh để biến các thuộc tính mở rộng thành một tài liệu ASCII cũ đơn giản (BTW là sql hợp lệ để tạo lại các bảng của bạn):

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"
    }
   }
} 
}

Bạn có thể tập lệnh hoàn thành lược đồ dbo của cơ sở dữ liệu đã cho

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

Hoặc lọc cho một bảng duy nhất

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

9

Tôi sử dụng các thuộc tính mở rộng và Red Gates SQL Doc.Hoạt động rất tốt!


7

DB Dictionary Creator

là một công cụ tài liệu cơ sở dữ liệu nguồn mở với GUI tùy chọn và xuất/nhập tốt.Nó sử dụng các thuộc tính mở rộng để lưu trữ tài liệu.Nó cũng sẽ tạo mô tả tự động cho các cột khóa chính và cột khóa ngoài.

+1

yêu cầu .NET Framework 4.0 và chỉ hoạt động với SQL Server và SQL Express 07 oct. 122012-10-07 15:55:26


9

Tôi sử dụng các công cụ mô hình hóa dữ liệu vì chúng cho phép tôi ghi lại thông tin quan trọng về cơ sở dữ liệu ngoài những gì "phù hợp" trong cơ sở dữ liệu.Dữ liệu meta như mối quan tâm riêng tư/bảo mật/độ nhạy cảm, quản lý, quản trị, v.v.

Điều đó có thể vượt xa những gì một số người cần trong việc ghi lại cơ sở dữ liệu, nhưng những điều đó rất quan trọng đối với doanh nghiệp và giúp họ quản lý dữ liệu của họ.

Các công cụ chính thức cũng giúp tôi quản lý dữ liệu được lưu trữ trong nhiều cơ sở dữ liệu/thể hiện/máy chủ.Điều này chưa bao giờ đúng hơn trong thế giới ứng dụng đóng gói của chúng tôi.


5

Thật vậy, Thuộc tính mở rộng (MS_Des mô tả) là cách để đi.Có các mô tả này có sẵn như là một phần của siêu dữ liệu có thể được sử dụng không chỉ bởi các trình tạo tài liệu mà còn (hy vọng một ngày) bởi các công cụ cung cấp "intellisense", ví dụ như Trợ lý SQL xuất sắc của http://www.softtreetech.com/isql.htm) hoặc được xây dựng trong SQL Sever Management Studio's Intellisense (kể từ sql2008)

Tôi cũng tin rằng các nhà phát triển và DBA nên dễ dàng thêm các ghi chú này vì như Tangurena và Nick Chammas đã chỉ ra một cách chính xác - các nhà phát triển rất miễn cưỡng giữ các tài liệu được cập nhật và ghét công việc trùng lặp - điều này đủ công bằng đặc biệt đối với một người được dạy để tối ưu hóa mọi thứ trong suốt cuộc đời chuyên nghiệp của họ.Vì vậy, trừ khi thật dễ dàng để cập nhật tài liệu ở một nơi gần với mã nguồn - điều này sẽ không hiệu quả.Tại một số thời điểm tôi đã tìm kiếm trên web và không tìm thấy giải pháp nào cho vấn đề này nên tôi đã viết LiveDoco (không miễn phí, xin lỗi) để cố gắng làm cho nó dễ dàng.Thêm thông tin ở đây nếu quan tâm: http://www.livedoco.com/why-livedoco


10

Tôi đã đặt thuộc tính mở rộng MS_description cho tất cả các đối tượng và sau đó ghi lại toàn bộ cơ sở dữ liệu bằng cách sử dụng ApexSQL Doc .


5

Bạn cũng có thể xem wsSqlSrvDoc .Đây là một công cụ nhỏ xinh hoạt động với các thuộc tính mở rộng của SQL Server và tạo tài liệu MS Word.

Bản in ra của tất cả các thuộc tính cột (có quan hệ khóa ngoài) hoạt động ngoài hộp.Để biết thêm mô tả về từng lĩnh vực, bạn phải thiết lập các thuộc tính mở rộng của các cột đó trong SQL Server Management Studio.

Nó không miễn phí nhưng khá phải chăng.Nếu bạn chỉ cần tạo một tài liệu cho một DB "không hoạt động" thì kết thúc ít nhiều sẽ không đủ để sử dụng bản dùng thử miễn phí.

Tool Website


8

Đối với tài liệu máy chủ sql, tôi khuyên bạn nên phát hành gần đây:

SQL Server & Windows Documentation Using Windows PowerShellđược viết bởi Kendal Van Dyke

Mô tả ngắn gọn từ liên kết:

SQL Power Doc là một tập hợp các tập lệnh và mô-đun Windows PowerShell khám phá, ghi lại và chẩn đoán các phiên bản SQL Server cũng như các cấu hình máy và hệ điều hành Windows bên dưới của chúng. SQL Power Doc hoạt động với tất cả các phiên bản SQL Server từ SQL Server 2000 đến 2012 và tất cả các phiên bản Windows Server và hệ điều hành Windows tiêu dùng từ Windows 2000 và Windows XP thông qua Windows Server 2012 và Windows 8. SQL Power Doc cũng có khả năng ghi lại Cơ sở dữ liệu Windows Azure SQL.


2

Chúng tôi sử dụng Dataedo để tạo từ điển dữ liệu, tài liệu lưu các thủ tục và chức năng.Chúng tôi dán ERD được tạo trong Visio.Tất cả tài liệu được lưu trữ trong kho lưu trữ siêu dữ liệu của Dataedo (văn bản có định dạng) và chúng tôi xuất nó sang HTML để sử dụng nội bộ hoặc xuất sang PDF cho tài liệu in.

Chúng tôi gán từng đối tượng cho một mô-đun và gán từng mô-đun cho một người.Dataedo đi kèm với báo cáo trạng thái tài liệu để chúng tôi có thể biết nếu có một cột hoặc bảng mới cần được ghi lại.