ฉันเล่นกับวิธีจัดโครงสร้างคำตอบสำหรับคำถามนี้ตั้งแต่แรกโพสต์ นี่เป็นเรื่องยากเนื่องจาก VS2010 ไม่ได้อธิบายเกี่ยวกับคุณสมบัติและประโยชน์ของเครื่องมือ นี่เป็นเรื่องเกี่ยวกับการโน้มน้าวใจผู้อ่านให้เปลี่ยนพื้นฐานในแนวทางการพัฒนาฐานข้อมูล ไม่ใช่เรื่องง่าย.
มีคำตอบสำหรับคำถามนี้จากผู้เชี่ยวชาญด้านฐานข้อมูลที่มีประสบการณ์ซึ่งมีแบ็คกราวน์ที่ประกอบไปด้วย DBA, ผู้พัฒนา / dba และทั้ง OLTP และคลังข้อมูล ฉันไม่สามารถใช้วิธีนี้กับทุกแง่มุมของการพัฒนาฐานข้อมูลได้ในที่เดียวดังนั้นฉันจะลองทำกรณีสำหรับสถานการณ์เฉพาะ
หากโครงการของคุณตรงกับเกณฑ์เหล่านี้ฉันคิดว่ามีกรณีที่น่าสนใจสำหรับ VS2010:
- ทีมของคุณใช้ VS2010 เพื่อการพัฒนาแอพพลิเคชั่น
- ทีมของคุณใช้ TFS เพื่อควบคุมแหล่งที่มาและสร้างการจัดการ
- ฐานข้อมูลของคุณคือ SQL Server
- ทีมของคุณมีหรือมีความสนใจในการทดสอบอัตโนมัติ VS
หากคุณกำลังประเมิน VS2010 สำหรับการพัฒนาฐานข้อมูลของคุณพระคัมภีร์จะเป็นVisual Studio ฐานข้อมูลคู่มือจากVisual Studio ALM เรนเจอร์ คำพูดใด ๆ ที่ตามมาซึ่งไม่มีการอ้างอิงจะมาจากเอกสารนี้
เราไปกันแล้ว ...
ทำไมกระบวนการพัฒนาฐานข้อมูลแตกต่างจากการพัฒนาแอปพลิเคชัน
ข้อมูล. หากไม่ใช่สำหรับข้อมูลที่น่ารำคาญการพัฒนาฐานข้อมูลจะเป็นสิ่งที่น่าเบื่อ เราสามารถลดทุกอย่างลงในทุกรุ่นและลืมเกี่ยวกับการจัดการการเปลี่ยนแปลงที่ยุ่งยากนี้
การมีอยู่ของข้อมูลทำให้กระบวนการเปลี่ยนแปลงฐานข้อมูลยุ่งยากเนื่องจากข้อมูลมักจะถูกโยกย้ายเปลี่ยนรูปหรือโหลดใหม่เมื่อมีการเปลี่ยนแปลงเกิดขึ้นจากความพยายามในการพัฒนาแอพพลิเคชั่นที่มีผลต่อรูปร่างของตารางฐานข้อมูลหรือ schema ข้อมูลอื่น ๆ ตลอดกระบวนการเปลี่ยนแปลงนี้ข้อมูลคุณภาพการผลิตและสถานะการปฏิบัติงานจะต้องได้รับการปกป้องจากการเปลี่ยนแปลงที่อาจเป็นอันตรายต่อความถูกต้องคุณค่าและประโยชน์ที่มีต่อองค์กร
เกิดอะไรขึ้นกับ SSMS
มันเรียกว่าสตูดิโอจัดการเซิร์ฟเวอร์ SQL ด้วยเหตุผล เป็นเครื่องมือแบบสแตนด์อโลนมันเป็นไปไม่ได้ในการจัดการความพยายามในการพัฒนาของคุณหากคุณจะปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดที่ได้รับการยอมรับ
ด้วยสคริปต์เพียงอย่างเดียวในการใช้การควบคุมซอร์สที่มีความหมายกับการพัฒนาของคุณคุณจะต้องรักษาทั้งนิยามของวัตถุ (เช่นสคริปต์ CREATE TABLE) และเปลี่ยนสคริปต์ (เช่น ALTER TABLE) และทำงานอย่างหนักเพื่อให้แน่ใจว่ายังคงซิงโครไนซ์
ห่วงโซ่ของรุ่นสำหรับการเปลี่ยนแปลงในตารางได้รับสวยบ้าคลั่งอย่างรวดเร็ว ตัวอย่างที่ง่ายมาก:
-- 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))
ตามเวอร์ชัน 3 สคริปต์การเปลี่ยนแปลงฐานข้อมูลประกอบด้วย:
ALTER TABLE dbo.Widget ADD Description VARCHAR(50)
ALTER TABLE dbo.Widget ALTER COLUMN Description VARCHAR(100)
หากเวอร์ชันสดของฐานข้อมูลนี้เป็นรุ่น 1 และรุ่นถัดไปของเราคือรุ่น 3 สคริปต์ด้านล่างจะเป็นสิ่งที่จำเป็นทั้งหมด แต่จะมีการดำเนินการทั้งสองคำสั่ง ALTER แทน
ALTER TABLE dbo.Widget ADD Description VARCHAR(100)
5 ปี 4 สัปดาห์การวิ่งเพิ่มขึ้นเป็นสคริปต์เวอร์ชั่นสนุกสนานและต้องการการจัดการเพิ่มเติมเพื่อลดผลกระทบต่อเวลาในการปรับใช้
ดังนั้นจะมีอะไรผิดปกติกับ SSMS หรือไม่ ไม่มันดีสำหรับสิ่งที่ดีสำหรับการบริหารและการจัดการ SQL Server สิ่งที่มันไม่ได้ทำเป็นว่าต้องทำก็คือช่วยผู้พัฒนาฐานข้อมูลที่มีภารกิจซับซ้อนมากในการจัดการการเปลี่ยนแปลง
หากคุณไม่สามารถสร้างฐานข้อมูลทุกรุ่นจากแหล่งที่มาและอัปเกรดเป็นเวอร์ชันในอนาคตการควบคุมแหล่งที่มาของคุณจะใช้งานไม่ได้ หากคุณไม่ได้คิดอย่างนั้นขอให้เอริคอ่างล้างจาน
สิ่งที่เกี่ยวกับ SSMS + <- เครื่องมือเปรียบเทียบสคีมาแทรก ->
นี่เป็นขั้นตอนในทิศทางที่ถูกต้องและต้องใช้ความพยายามอย่างมากในการบำรุงรักษาสคริปต์ แต่ (และมันก็ใหญ่ แต่) โดยทั่วไปจะมีขั้นตอนที่ต้องทำด้วยตนเอง
เครื่องมือเปรียบเทียบสคีมาที่ได้รับความนิยมสามารถเป็นแบบอัตโนมัติและบูรณาการเข้ากับกระบวนการสร้าง อย่างไรก็ตามในประสบการณ์ของฉันการปฏิบัติทั่วไปที่พบบ่อยคือการเปรียบเทียบที่จะเรียกใช้ด้วยตนเองสคริปต์ที่เป็นผลลัพธ์จะตรวจดูในตาแหน่งในการควบคุมแหล่งที่มาจากนั้นเรียกใช้ด้วยตนเองเพื่อปรับใช้ ไม่ดี.
เมื่อใดก็ตามที่เราเข้าใจผิดได้มนุษย์จะต้องมีส่วนร่วมในกระบวนการสร้างหรือปรับใช้ที่เราแนะนำความเสี่ยงและเราทำให้กระบวนการไม่สามารถทำซ้ำได้
หากคุณและทีมของคุณเป็นหนึ่งในไม่กี่คนที่มีการเปรียบเทียบและการปรับใช้สคีมาโดยอัตโนมัติอย่าปิดบังคุณ! พวกคุณมักจะเปิดรับผลประโยชน์ที่ VS2010 นำเสนอให้เป็น:
- คุณยอมรับแล้วว่าขั้นตอนแบบแมนนวลนั้นอันตราย
- คุณเห็นคุณค่าของระบบอัตโนมัติ
- คุณยินดีที่จะลงทุนเวลาที่จำเป็นเพื่อให้มันใช้ได้
หากคุณไม่สามารถสร้างบิลด์ได้ในขั้นตอนเดียวหรือปรับใช้ในขั้นตอนเดียวกระบวนการพัฒนาและการปรับใช้ของคุณจะใช้งานไม่ได้ หากคุณไม่ได้คิดอย่างนั้นขอให้โจ Spolsky
ทำไมต้อง VS2010
คำถาม @NickChammas ถูกวางกำลังมองหาคุณสมบัตินักฆ่าที่แสดงให้เห็นว่าทำไม VS2010 เป็นตัวเปลี่ยนเกมสำหรับการพัฒนาฐานข้อมูล ฉันไม่คิดว่าฉันจะทำเรื่องนี้ได้
บางทีอาจเป็นเรื่องตลกที่ผู้อื่นเห็นข้อบกพร่องในเครื่องมือนี้ฉันเห็นเหตุผลที่ดีในการนำไปใช้:
- คุณจะต้องเปลี่ยนวิธีการของคุณ
- คุณและทีมของคุณจะถูกบังคับให้ทำงานในวิธีที่ต่างออกไป
- คุณจะต้องประเมินผลกระทบของการเปลี่ยนแปลงทุกอย่างโดยละเอียด
- คุณจะได้รับคำแนะนำต่อการทำการเปลี่ยนแปลงทุกidempotent
หากคุณเป็น DBA แต่เพียงผู้เดียวในโครงการจัดการการเปลี่ยนแปลงทั้งหมดในฐานข้อมูลเหตุผลนี้ต้องฟังดูไร้สาระที่ไร้สาระ หากอย่างไรก็ตามคุณคิดว่า @BrentOzar มีประเด็นและหนึ่งในกฎใหม่คือทุกคนเป็น DBAคุณจะต้องควบคุมการเปลี่ยนแปลงฐานข้อมูลในแบบที่นักพัฒนาทุกคนในทีมสามารถทำงานได้
การยอมรับโครงการฐานข้อมูลอาจต้องการการเปลี่ยนแปลงทางจิต ( นิสัยเก่ายากที่จะทำลาย ) สำหรับนักพัฒนาบางคนหรืออย่างน้อยก็เปลี่ยนกระบวนการหรือเวิร์กโฟลว์ นักพัฒนาที่มีการใช้งานฐานข้อมูลที่พัฒนาแล้ว
ที่ฐานข้อมูลการผลิตหมายถึงรุ่นปัจจุบันของฐานข้อมูลที่จะต้องนำมาใช้เป็นวิธีการตามรหัสที่มารหัสที่มาที่กลายเป็นรถที่มีการเปลี่ยนแปลงจะทำให้ฐานข้อมูล ในโครงการฐานข้อมูล Visual Studio โครงการและซอร์สโค้ดคือ "หนึ่งเวอร์ชันของความจริง" สำหรับสคีมาฐานข้อมูลและได้รับการจัดการโดยใช้เวิร์กโฟลว์ SCM ที่ผู้พัฒนาหรือองค์กรใช้สำหรับส่วนอื่น ๆ ของสแต็กแอปพลิเคชันแล้ว สำหรับข้อมูลฐานข้อมูลการผลิตยังคงเป็น "หนึ่งเวอร์ชันของความจริง" ตามที่ควรจะเป็น
เราได้มาถึงการเปลี่ยนแปลงขั้นพื้นฐานที่จำเป็นเพื่อให้ประสบความสำเร็จในการนำวิธีการ VS2010 มาใช้กับการพัฒนาฐานข้อมูล ...
ปฏิบัติต่อฐานข้อมูลของคุณเป็นรหัส
ไม่มีการเปลี่ยนแปลงฐานข้อมูลสด การเปลี่ยนแปลงฐานข้อมูลทุกครั้งจะเป็นไปตามรูปแบบเดียวกันกับการเปลี่ยนแปลงแอปพลิเคชัน ปรับเปลี่ยนแหล่งที่มาสร้างปรับใช้ นี้ไม่ได้มีการเปลี่ยนแปลงชั่วคราวของทิศทางจากไมโครซอฟท์นี้เป็นอนาคตสำหรับ SQL Server ฐานข้อมูลเป็นรหัสอยู่ที่นี่อยู่
ผู้พัฒนาฐานข้อมูลกำหนดรูปร่างของวัตถุสำหรับรุ่นของแอปพลิเคชันไม่ใช่วิธีการเปลี่ยนวัตถุที่มีอยู่ในโปรแกรมฐานข้อมูลให้เป็นรูปร่างที่ต้องการ คุณอาจถามตัวเอง: สิ่งนี้จะถูกนำไปปรับใช้กับฐานข้อมูลที่มีตารางลูกค้าอยู่แล้วได้อย่างไร นี่คือสิ่งที่เอ็นจิ้นการปรับใช้เข้ามาเพื่อเล่น ตามที่กล่าวไว้ก่อนหน้านี้เอ็นจิ้นการปรับใช้จะใช้สกีมาเวอร์ชันที่คอมไพล์แล้วและเปรียบเทียบกับเป้าหมายการปรับใช้ฐานข้อมูล เอ็นจิน differencing จะสร้างสคริปต์ที่จำเป็นเพื่ออัพเดตสกีมาเป้าหมายเพื่อให้ตรงกับเวอร์ชันที่คุณกำลังปรับใช้จากโครงการ
ใช่มีเครื่องมืออื่น ๆ ที่ทำตามรูปแบบที่คล้ายกันและสำหรับโครงการที่อยู่นอกขอบเขตที่ฉันวางไว้บนคำตอบของฉันพวกเขามีค่าควรพิจารณาอย่างเท่าเทียมกัน แต่ถ้าคุณทำงานกับ Visual Studio และ ALM Server Foundation ฉันไม่คิดว่าพวกเขาจะสามารถแข่งขันได้
เกิดอะไรขึ้นกับโครงการฐานข้อมูล VS2010
- พวกเขาจะไม่สมบูรณ์แบบ แต่ถ้าคุณตระหนักถึงข้อ จำกัด และพื้นที่ปัญหาคุณสามารถแก้ไขได้
- การเคลื่อนไหวของข้อมูลที่ซับซ้อนยังต้องการการดูแลและเอาใจใส่ แต่จะได้รับการจัดเตรียมด้วยสคริปต์การปรับใช้งานล่วงหน้า / โพสต์
แก้ไข: แล้วประเด็นของคุณคืออะไร?
@AndrewBickerton พูดถึงในความคิดเห็นที่ฉันไม่ได้ตอบคำถามเดิมดังนั้นฉันจะลองและสรุป "ทำไมฉันจึงควรใช้ Visual Studio 2010 บน SSMS สำหรับการพัฒนาฐานข้อมูลของฉัน" ที่นี่
- SSMS ไม่ใช่เครื่องมือพัฒนาฐานข้อมูล ใช่คุณสามารถพัฒนา TSQL ด้วย SSMS ได้ แต่ไม่ได้ให้ฟีเจอร์ IDE ที่สมบูรณ์ของ VS2010
- VS2010 จัดเตรียมเฟรมเวิร์กเพื่อจัดการฐานข้อมูลของคุณเป็นโค้ด
- VS2010 นำการวิเคราะห์รหัสแบบคงที่ไปยังรหัสฐานข้อมูลของคุณ
- VS2010 มอบเครื่องมือที่จะทำให้รอบการทดสอบการปรับใช้
- SQL2012 และ Visual Studio vNext ขยายขีดความสามารถของโครงการฐานข้อมูล ทำความคุ้นเคยกับ VS2010 ตอนนี้และคุณจะได้เริ่มต้นใช้งานเครื่องมือพัฒนาฐานข้อมูลรุ่นต่อไป