Tôi đã chơi với cách cấu trúc một câu trả lời cho câu hỏi này kể từ khi nó được đăng lần đầu. Điều này rất khó vì trường hợp của VS2010 không phải là về việc mô tả các tính năng và lợi ích của công cụ. Đây là về việc thuyết phục người đọc thực hiện một sự thay đổi cơ bản trong cách tiếp cận phát triển cơ sở dữ liệu của họ. Không dễ.
Có câu trả lời cho câu hỏi này từ các chuyên gia cơ sở dữ liệu dày dạn, với một hỗn hợp nền bao gồm DBA, nhà phát triển / dba và cả OLTP và kho dữ liệu. Tôi không thể tiếp cận điều này cho mọi khía cạnh của việc phát triển cơ sở dữ liệu trong một lần ngồi, vì vậy tôi sẽ thử và đưa ra một trường hợp cho một kịch bản cụ thể.
Nếu dự án của bạn phù hợp với các tiêu chí này, tôi nghĩ rằng có một trường hợp hấp dẫn cho VS2010:
- Nhóm của bạn đang sử dụng VS2010 để phát triển ứng dụng.
- Nhóm của bạn đang sử dụng TFS để kiểm soát nguồn và quản lý xây dựng.
- Cơ sở dữ liệu của bạn là SQL Server.
- Nhóm của bạn đã có hoặc quan tâm đến thử nghiệm tự động VS.
Nếu bạn đang đánh giá VS2010 để phát triển cơ sở dữ liệu, kinh thánh của bạn sẽ là Hướng dẫn cơ sở dữ liệu Visual Studio từ Visual Studio ALM Rangers . Bất kỳ trích dẫn nào không có tài liệu tham khảo sẽ được lấy từ tài liệu này.
Chúng ta đi thôi ...
Tại sao quá trình phát triển cơ sở dữ liệu khác với phát triển ứng dụng?
Dữ liệu. Nếu không có dữ liệu phiền phức đó, việc phát triển cơ sở dữ liệu sẽ là một sự tránh né. Chúng tôi chỉ có thể DROP mọi thứ trên mỗi bản phát hành và quên đi việc quản lý thay đổi rắc rối này.
Sự tồn tại của dữ liệu làm phức tạp quá trình thay đổi cơ sở dữ liệu vì dữ liệu thường được di chuyển, biến đổi hoặc tải lại khi các thay đổi được đưa ra bởi các nỗ lực phát triển ứng dụng ảnh hưởng đến hình dạng của các bảng của cơ sở dữ liệu hoặc các lược đồ dữ liệu khác. Trong suốt quá trình thay đổi này, dữ liệu chất lượng sản xuất và trạng thái hoạt động phải được bảo vệ trước những thay đổi có thể gây nguy hiểm cho tính toàn vẹn, giá trị và tính hữu ích của nó đối với tổ chức.
SSMS có gì sai?
Nó được gọi là SQL Server Management Studio vì một lý do. Là một công cụ độc lập, việc quản lý các nỗ lực phát triển của bạn là không thực tế nếu bạn sẽ tuân theo các thực tiễn tốt nhất được chấp nhận.
Chỉ riêng với các tập lệnh, để áp dụng một cách có ý nghĩa các thực tiễn kiểm soát nguồn đã thiết lập vào sự phát triển của bạn, bạn sẽ phải duy trì cả hai định nghĩa đối tượng (ví dụ: tập lệnh CREATE TABLE) VÀ thay đổi tập lệnh (ví dụ ALTER TABLE) VÀ làm việc chăm chỉ để đảm bảo chúng vẫn được đồng bộ hóa.
Chuỗi các phiên bản để thay đổi bảng trở nên khá nhanh chóng. Một ví dụ rất đơn giản:
-- Version 1
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20))
-- Version 2
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20), Description VARCHAR(50))
-- Version 3
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20), Description VARCHAR(100))
Đến phiên bản 3, tập lệnh thay đổi cơ sở dữ liệu chứa:
ALTER TABLE dbo.Widget ADD Description VARCHAR(50)
ALTER TABLE dbo.Widget ALTER COLUMN Description VARCHAR(100)
Nếu phiên bản trực tiếp của cơ sở dữ liệu này là phiên bản 1 và phiên bản tiếp theo của chúng tôi là phiên bản 3, tập lệnh bên dưới sẽ là tất cả những gì cần thiết nhưng thay vào đó cả hai câu lệnh ALTER sẽ được thực thi.
ALTER TABLE dbo.Widget ADD Description VARCHAR(100)
5 năm của 4 tuần nước rút thêm vào một số kịch bản phiên bản giải trí và yêu cầu xử lý con người bổ sung để giảm thiểu tác động đến thời gian triển khai.
Vậy có gì sai với SSMS? Không, nó tốt cho những gì tốt cho việc quản trị và quản lý SQL Server. Những gì nó thậm chí không giả vờ làm là hỗ trợ nhà phát triển cơ sở dữ liệu với nhiệm vụ rất phức tạp (đôi khi) là quản lý thay đổi.
Nếu bạn không thể xây dựng mọi phiên bản cơ sở dữ liệu từ nguồn và nâng cấp lên bất kỳ phiên bản nào trong tương lai, kiểm soát nguồn của bạn sẽ bị hỏng. Nếu bạn không nghĩ vậy, hãy hỏi Eric chìm .
Điều gì về SSMS + <- chèn công cụ so sánh lược đồ ->?
Đây chắc chắn là một bước đi đúng hướng và lấy đi nhiều nỗ lực thủ công cần có để duy trì các tập lệnh. Nhưng (và nó lớn nhưng), thường có các bước thủ công liên quan.
Các công cụ so sánh lược đồ phổ biến có thể hoàn toàn tự động và được tích hợp vào quá trình xây dựng. Tuy nhiên, theo kinh nghiệm của tôi, thực tế phổ biến hơn là để so sánh được chạy thủ công, các tập lệnh kết quả được đánh dấu, kiểm tra để kiểm soát nguồn, sau đó được thực hiện thủ công để triển khai. Không tốt.
Bất cứ khi nào chúng ta có thể ngụy biện, con người phải tham gia vào quá trình xây dựng hoặc triển khai, chúng tôi đưa ra rủi ro và chúng tôi làm cho quá trình không thể lặp lại.
Nếu bạn và nhóm của bạn nằm trong số ít người có so sánh và triển khai lược đồ hoàn toàn tự động, hãy ngả mũ với bạn! Các bạn rất có thể sẽ cởi mở với những lợi ích mà VS2010 mang lại như:
- Bạn đã chấp nhận rằng các bước thủ công là nguy hiểm.
- Bạn thấy giá trị của tự động hóa.
- Bạn sẵn sàng đầu tư thời gian cần thiết để làm cho nó hoạt động.
Nếu bạn không thể tạo bản dựng trong một bước hoặc triển khai trong một bước duy nhất, quy trình phát triển và triển khai của bạn sẽ bị hỏng. Nếu bạn không nghĩ vậy, hãy hỏi Joel Spolsky .
Tại sao lại là VS2010?
Câu hỏi @NickChammas đặt ra là tìm kiếm các tính năng sát thủ chứng minh tại sao VS2010 là một công cụ thay đổi trò chơi để phát triển cơ sở dữ liệu. Tôi không nghĩ rằng tôi có thể làm cho trường hợp trên cơ sở đó.
Có lẽ về mặt hài hước, nơi những người khác nhìn thấy lỗ hổng trong công cụ này, tôi thấy những lý do mạnh mẽ để áp dụng:
- Bạn sẽ phải thay đổi cách tiếp cận của bạn.
- Bạn và nhóm của bạn sẽ bị buộc phải làm việc theo một cách khác.
- Bạn sẽ phải đánh giá tác động của mọi thay đổi, theo chiều dài, chi tiết.
- Bạn sẽ được hướng dẫn về hướng làm cho mọi thay đổi idempotent .
Nếu bạn là DBA duy nhất trong một dự án, quản lý tất cả các thay đổi đối với cơ sở dữ liệu, lý do này phải nghe có vẻ vô lý giáp với vô lý. Tuy nhiên, nếu bạn nghĩ rằng @BrentOzar có một điểm và một trong những quy tắc mới là DBA của mọi người , bạn sẽ cần kiểm soát thay đổi cơ sở dữ liệu theo cách mà mọi nhà phát triển trong nhóm có thể làm việc.
Việc áp dụng các dự án cơ sở dữ liệu có thể đòi hỏi một sự thay đổi tinh thần ( thói quen cũ khó phá vỡ ) đối với một số nhà phát triển hoặc ít nhất là một sự thay đổi trong quy trình hoặc quy trình công việc. Các nhà phát triển đã phát triển các ứng dụng cơ sở dữ liệu
trong đó cơ sở dữ liệu sản xuất đại diện cho phiên bản hiện tại của cơ sở dữ liệu sẽ cần áp dụng cách tiếp cận dựa trên mã nguồn, nơi mã nguồn trở thành phương tiện để thay đổi cơ sở dữ liệu . Trong Visual Studio Database Project, dự án và mã nguồn là "Một phiên bản của sự thật" cho lược đồ cơ sở dữ liệu và được quản lý bằng các luồng công việc SCM có khả năng đã được nhà phát triển hoặc tổ chức sử dụng cho các phần khác của ngăn xếp ứng dụng của họ. Đối với dữ liệu, cơ sở dữ liệu sản xuất vẫn là "Một phiên bản của sự thật" như mong muốn.
Chúng tôi đã đi đến sự thay đổi cơ bản cần thiết để áp dụng thành công cách tiếp cận VS2010 để phát triển cơ sở dữ liệu
Coi cơ sở dữ liệu của bạn dưới dạng mã
Không còn thay đổi cơ sở dữ liệu trực tiếp. Mọi thay đổi cơ sở dữ liệu sẽ theo cùng một mẫu với thay đổi ứng dụng. Sửa đổi nguồn, xây dựng, triển khai. Đây không phải là một sự thay đổi hướng tạm thời từ Microsoft, đây là tương lai cho SQL Server . Cơ sở dữ liệu như mã ở đây để ở lại.
Nhà phát triển cơ sở dữ liệu xác định hình dạng của đối tượng cho phiên bản của ứng dụng, chứ không phải làm thế nào để biến đổi đối tượng hiện có trong công cụ cơ sở dữ liệu thành hình dạng mong muốn. Bạn có thể tự hỏi: Làm thế nào điều này được triển khai đối với cơ sở dữ liệu đã chứa bảng khách hàng? Đây là nơi công cụ triển khai đến để chơi. Như đã đề cập trước đây, công cụ triển khai sẽ lấy phiên bản đã biên dịch của lược đồ của bạn và so sánh nó với mục tiêu triển khai cơ sở dữ liệu. Công cụ phân biệt sẽ tạo ra các tập lệnh cần thiết để cập nhật lược đồ đích để phù hợp với phiên bản bạn đang triển khai từ dự án.
Vâng, có những công cụ khác theo một mô hình tương tự và đối với các dự án ngoài các ràng buộc mà tôi đã đặt vào câu trả lời của mình, chúng đáng để xem xét như nhau. Nhưng, nếu bạn đang làm việc với Visual Studio và Team Foundation Server ALM, tôi không nghĩ họ có thể cạnh tranh.
Có gì sai với các dự án cơ sở dữ liệu VS2010?
Chỉnh sửa: Vậy quan điểm của bạn là gì?
@AndrewBickerton đã đề cập trong một bình luận rằng tôi chưa trả lời câu hỏi ban đầu nên tôi sẽ thử và tóm tắt "Tại sao tôi nên sử dụng Visual Studio 2010 qua SSMS để phát triển cơ sở dữ liệu của mình?" đây.
- SSMS không phải là một công cụ phát triển cơ sở dữ liệu. Có, bạn có thể phát triển TSQL với SSMS nhưng nó không cung cấp các tính năng IDE phong phú của VS2010.
- VS2010 cung cấp một khung để coi cơ sở dữ liệu của bạn dưới dạng mã.
- VS2010 mang phân tích mã tĩnh vào mã cơ sở dữ liệu của bạn.
- VS2010 cung cấp cho bạn các công cụ để tự động hóa hoàn toàn chu trình xây dựng-triển khai-thử nghiệm.
- SQL2012 và Visual Studio vNext mở rộng khả năng của các dự án cơ sở dữ liệu. Làm quen với VS2010 ngay bây giờ và bạn đã bắt đầu với các công cụ phát triển cơ sở dữ liệu thế hệ tiếp theo.