2008-08-07 28 views
11

Tôi hiện đang tạo một DDL chính cho cơ sở dữ liệu của chúng tôi. Trong lịch sử chúng tôi đã sử dụng sao lưu/khôi phục lại phiên bản cơ sở dữ liệu của chúng tôi, và không duy trì bất kỳ tập lệnh ddl. Lược đồ khá lớn.Tôi nên tổ chức kịch bản chính ddl của mình như thế nào

suy nghĩ hiện tại của tôi:

  • Nghỉ giải lao kịch bản thành nhiều phần (có thể là trong kịch bản riêng biệt):

    1. tạo bảng
    2. thêm chỉ số
    3. add gây
    4. thêm trở ngại
  • Mỗi tập lệnh sẽ được gọi bằng tập lệnh chính.

  • Tôi có thể cần tập lệnh để tạm thời giảm các ràng buộc để thử nghiệm
  • Có thể có các bảng mồ côi trong lược đồ, tôi định xác định các bảng nghi ngờ.

Bạn có lời khuyên nào khác không?

Chỉnh sửa: Ngoài ra nếu có ai biết các công cụ tốt để tự động hóa một phần quy trình, chúng tôi đang sử dụng MS SQL 2000 (cũ, tôi biết).

Trả lời

1

Những gì bạn có ở đó có vẻ khá tốt. Công ty của tôi đã có dịp, cho cơ sở dữ liệu đủ lớn, bị hỏng nó xuống hơn nữa, có lẽ đến mức đối tượng cá nhân. Theo cách này, mỗi bảng/chỉ mục/... đều có tệp riêng. Có thể hữu ích, có thể quá mức cần thiết. Thực sự phụ thuộc vào cách bạn đang sử dụng nó.

@Justin

Theo miền thường là đủ. Tôi đồng ý rằng có một số phức tạp để đối phó với khi làm theo cách này, nhưng điều đó phải được dễ dàng, đủ để xử lý.

Tôi nghĩ rằng phương pháp này cung cấp sự tách biệt hơn một chút (trong cơ sở dữ liệu lớn mà bạn sẽ đánh giá cao) trong khi vẫn làm cho nó dễ quản lý. Chúng tôi cũng viết các tập lệnh Perl làm rất nhiều việc xử lý các tệp DDL này, do đó, đó có thể là một tùy chọn để có cách xử lý tốt.

1

Đầu tư thời gian để viết tập lệnh "thả tất cả các ràng buộc" chung, vì vậy bạn không phải duy trì nó.

Con trỏ trên các câu lệnh sau sẽ thực hiện thủ thuật.

Select * From Information_Schema.Table_Constraints 

Select * From Information_Schema.Referential_Constraints 
1

@ Adam

Hoặc làm thế nào về chỉ bằng miền - một nhóm hữu ích của các bảng liên quan trong cùng một tập tin, nhưng tách biệt với phần còn lại?

Chỉ có vấn đề là nếu một số miền (trong hệ thống này phần nào kế thừa) được kết hợp chặt chẽ. Ngoài ra, bạn phải duy trì sự phụ thuộc giữa các tập lệnh con khác nhau của mình.

0

Trước đây, tôi đã tổ chức mã DDL của mình do một tệp cho mỗi thực thể tổ chức và tạo một công cụ kết hợp điều này thành một tập lệnh DDL duy nhất.

Chủ cũ của tôi đã sử dụng một sơ đồ trong đó tất cả các bảng DDL nằm trong một tệp (được lưu trữ trong cú pháp oracle), chỉ ra một ràng buộc khác trong dữ liệu thứ ba và tĩnh trong phần thứ tư. Một kịch bản thay đổi được giữ song song với điều này (một lần nữa trong Oracle). Việc chuyển đổi sang SQL là thủ công. Nó là một mớ hỗn độn. Tôi thực sự đã viết một công cụ tiện dụng mà sẽ chuyển đổi Oracle DDL sang SQL Server (nó đã làm việc 99,9% thời gian).

Gần đây tôi đã chuyển sang sử dụng Visual Studio Team System for Database professionals. Cho đến nay nó hoạt động tốt, nhưng có một số trục trặc nếu bạn sử dụng các hàm CLR trong cơ sở dữ liệu.

3

Tôi nghĩ ý tưởng cơ bản là tốt.

Điều tốt đẹp về việc xây dựng tất cả các bảng trước và sau đó xây dựng tất cả các ràng buộc, là các bảng có thể được tạo theo thứ tự bất kỳ. Khi tôi đã làm điều này tôi đã có một tập tin cho mỗi bảng, mà tôi đặt trong một thư mục gọi là "Bàn" và sau đó một kịch bản mà thực hiện tất cả các tập tin trong thư mục đó. Tương tự như vậy, tôi đã có một thư mục cho các kịch bản ràng buộc (cả khóa và chỉ mục ngoài), được thực thi khi các bảng được xây dựng.

Tôi sẽ tách riêng việc xây dựng trình kích hoạt và các thủ tục được lưu trữ và chạy các bước cuối cùng. Vấn đề là chúng có thể chạy và chạy lại trên cơ sở dữ liệu mà không ảnh hưởng đến dữ liệu. Điều này có nghĩa là bạn có thể đối xử với họ giống như mã thông thường. Bạn nên bao gồm các câu lệnh "if exists ... drop" ở đầu mỗi tập lệnh kích hoạt và thủ tục để làm cho chúng có thể chạy lại được.

Vì vậy, thứ tự sẽ là

  1. tạo bảng
  2. thêm chỉ số
  3. thêm trở ngại

Sau đó

  1. add gây
  2. thêm pr được lưu trữ ocedures

Dự án hiện tại của tôi, chúng tôi đang sử dụng MSBuild để chạy tập lệnh. Có một số extension targets mà bạn có thể nhận được cho phép bạn gọi các tập lệnh sql. Trong quá khứ tôi đã sử dụng perl đó là tốt quá (và tập tin batch ... mà tôi sẽ không khuyên bạn nên - the're quá giới hạn).

+0

Tôi cũng có môi trường tương tự nơi tôi sử dụng MSBuild để kiểm soát việc thực thi tập lệnh. Nó cũng cho phép tôi bao gồm các kịch bản tải dữ liệu khi thích hợp. Ví dụ, tôi có thể tải dữ liệu mẫu vào bản sao thử nghiệm hoặc bản demo của cơ sở dữ liệu. – bobs

+0

Nó không phải luôn luôn dễ dàng như vậy, nó có thể có một cột tính toán trên một bảng, tính toán được thực hiện trong một chức năng. Hầu hết các hàm phụ thuộc vào các bảng, nhưng các bảng có các cột được tính toán phụ thuộc vào các hàm. Vì vậy, nếu bạn cố gắng thẳng "bảng đầu tiên, sau đó constrainsts, sau đó chức năng sau đó xem" bạn sẽ tìm thấy bạn có một vấn đề. –

1

Nếu bạn đang tìm kiếm một công cụ tự động hóa, tôi thường làm việc với EMS SQLManager, cho phép bạn tự động tạo tập lệnh ddl từ cơ sở dữ liệu.

Chèn dữ liệu trong bảng tham chiếu có thể là bắt buộc trước khi đặt cơ sở dữ liệu của bạn trực tuyến. Điều này thậm chí có thể được coi là một phần của tập lệnh ddl. EMS cũng có thể tạo các tập lệnh chèn dữ liệu từ cơ sở dữ liệu hiện có.

Cần cho các chỉ mục có thể không được ước tính chính xác ở giai đoạn ddl. Bạn sẽ chỉ cần khai báo chúng cho khóa chính/khóa ngoài. Các chỉ mục khác sẽ được tạo sau này, khi các chế độ xem và truy vấn đã được xác định

1

có một công cụ gọn gàng sẽ lặp qua toàn bộ máy chủ sql và trích xuất tất cả các bảng, xem, lưu trữ và xóa UDF vào hệ thống tệp cục bộ Các tập lệnh SQL (Tệp văn bản). Tôi đã sử dụng điều này với năm 2005 và 2008, không chắc chắn làm thế nào nó wil làm việc với năm 2000 mặc dù.Hãy xem http://www.antipodeansoftware.com/Home/Products

Các vấn đề liên quan