วิธีการควบคุมเวอร์ชันเวอร์ชันใดที่ช่วยให้ทีมงานของผู้ใช้สามารถติดตามการเปลี่ยนแปลงคีมาฐานข้อมูลได้
วิธีการควบคุมเวอร์ชันเวอร์ชันใดที่ช่วยให้ทีมงานของผู้ใช้สามารถติดตามการเปลี่ยนแปลงคีมาฐานข้อมูลได้
คำตอบ:
เพียงไม่กี่นาทีที่ผ่านมาฉันตรวจสอบสิ่งนี้: ตารางที่ควรมีอยู่ในทุกโครงการที่มีฐานข้อมูลดูเหมือนง่ายพอที่จะนำไปใช้ในทางปฏิบัติลองดู:
มันเรียกว่า schema_version (หรือการโยกย้ายหรือสิ่งที่เหมาะกับคุณ) และวัตถุประสงค์ของมันคือการติดตามการเปลี่ยนแปลงโครงสร้างหรือข้อมูลในฐานข้อมูล โครงสร้างที่เป็นไปได้ (ตัวอย่างใน MySQL) คือ:
create table schema_version ( `when` timestamp not null default CURRENT_TIMESTAMP, `key` varchar(256) not null, `extra` varchar(256), primary key (`key`) ) ENGINE=InnoDB;
แทรกลงในค่า schema_version (
key
,extra
) ('001', 'เวอร์ชันสกีมา');ไม่ว่าคุณจะเพิ่มตารางนี้จากการเริ่มต้นของโปรเจ็กต์หรือหลังจากคุณปรับใช้เวอร์ชันแรกไปยังเซิร์ฟเวอร์ staging หรือเซิร์ฟเวอร์การผลิตแล้วขึ้นอยู่กับคุณ
เมื่อใดก็ตามที่คุณต้องการรันสคริปต์ SQL เพื่อเปลี่ยนโครงสร้างฐานข้อมูลหรือทำการย้ายข้อมูลคุณควรเพิ่มแถวในตารางนั้นด้วย และทำสิ่งนั้นผ่านคำสั่งแทรกที่จุดเริ่มต้นหรือจุดสิ้นสุดของสคริปต์นั้น (ซึ่งกำหนดให้กับที่เก็บรหัสของโครงการ)
...
ผมคิดว่าวิธีที่ดีที่สุดคือการมีฐานข้อมูลที่สร้างขึ้นเป็นส่วนหนึ่งของการสร้างกระบวนการของคุณ เก็บสคริปต์ทั้งหมดไว้ในการควบคุมซอร์สด้วยโค้ดที่เหลือและทุกคนมีหน้าที่รับผิดชอบต่อสภาพแวดล้อมของตนเอง
ความล้มเหลวนั้น RedGate มีเครื่องมือในการรวมการควบคุมแหล่งลงใน SSMSและSQL Compareเป็นประโยชน์สำหรับการเปรียบเทียบ / การซิงโครไนซ์สกีมา MS SQL Server Visual Studio Database Edition ยังมีเครื่องมือเปรียบเทียบสคีมาในตัวอีกด้วย
คำถามอีกข้อหนึ่งนำฉันไปที่Migrator Dot Netซึ่งฉันจะเริ่มตรวจสอบในช่วงเวลาว่างมากมาย ดูเหมือนว่าเป็นวิธีที่ดี แต่อาจเป็นการลงทุนครั้ง / ค่าใช้จ่ายมากกว่าที่คุณเต็มใจจะทำ
ฉันคิดว่ามีมุมที่แตกต่างกันสองสามข้อ ฉันเชื่อว่ามุมแรกของเครื่องมือจะแตกต่างกันไปตามแพลตฟอร์มและความชอบส่วนตัว ตัวอย่างตรงประเด็น: ฉันใช้โครงการฐานข้อมูลใน MS Visual Studio แต่ฉันไม่แน่ใจว่านี่เป็นทางออกที่ดีสำหรับ MySQL ฉันรู้ว่าคนที่ขายของสวย ๆ ในเครื่องมือโปรดของพวกเขาจาก Redgate, Erwin, Embarcadero ฯลฯ
นอกจากนี้ยังมีมุม "กระบวนการแรก" สำหรับคำถามนี้ซึ่ง (หวังว่า) จะได้รับการเข้าชมอีกครั้งบนไซต์นี้ในคำถามถัดไป หลักสำคัญในกระบวนการนี้กำลังทำให้สกีมาของคุณอยู่ภายใต้การควบคุมแหล่งที่มาและการจัดการการเปลี่ยนแปลงเพื่อให้คุณสามารถใช้การเปลี่ยนแปลงสคีมาจากรุ่น "x" เป็นรุ่น "y" ได้ตามต้องการ
คำตอบที่ชัดเจนสำหรับหัวข้อนี้จะจบลงด้วยการมองหาหนังสือดังนั้นมันอาจคุ้มค่าที่จะเริ่มต้นด้วยการอ้างอิงหนึ่ง: Redgate เพิ่งเผยแพร่ ebook ฟรีที่เรียกว่า " The Red Gate Guide to SQL Server-based Development Team " และในขณะที่มี มีการถกเถียงกันมากมายมันเป็นสถานที่ที่ดีในการเริ่มการโต้วาที IMO ตรงกันข้ามกับชื่อเนื้อหาส่วนใหญ่ในหนังสือเล่มนี้เป็นเรื่องทั่วไปพอที่จะนำไปใช้กับฐานข้อมูลใด ๆ (ไม่ใช่แค่ SQL Server) และชุดเครื่องมือใด ๆ (ไม่ใช่แค่ Redgate) หากคุณยังไม่เคยเห็นสิ่งนี้มาก่อน
ในที่สุดก็อาจจะคุ้มค่าเชื่อมโยงในส่วน "คำตอบแบบเดิม" จาก StackOverflow
SchemaCrawlerเป็นเครื่องมือของฉันในการสร้างไฟล์ข้อความที่มีวัตถุคีมาฐานข้อมูลทั้งหมด ฉันออกแบบเอาต์พุตข้อความนี้ให้สามารถอ่านได้ทั้งมนุษย์และ diff- สามารถเทียบกับเอาต์พุตที่คล้ายกันจากเซิร์ฟเวอร์อื่น
ในทางปฏิบัติสิ่งที่ฉันได้พบคือการส่งออกไฟล์ข้อความของสคีมาฐานข้อมูลจะมีประโยชน์เมื่อทำในฐานะส่วนหนึ่งของบิลด์ ด้วยวิธีนี้คุณสามารถตรวจสอบไฟล์ข้อความลงในระบบควบคุมซอร์สโค้ดของคุณและมีประวัติรุ่นว่าสคีมาของคุณมีวิวัฒนาการไปอย่างไรเมื่อเวลาผ่านไป SchemaCrawler ได้รับการออกแบบให้ทำงานอัตโนมัติเช่นกันจากบรรทัดคำสั่ง