สกีมาฐานข้อมูลติดตามกลุ่มสามารถเปลี่ยนแปลงได้อย่างไร


67

วิธีการควบคุมเวอร์ชันเวอร์ชันใดที่ช่วยให้ทีมงานของผู้ใช้สามารถติดตามการเปลี่ยนแปลงคีมาฐานข้อมูลได้


คุณพยายามทำอะไรที่นี่ คุณพยายามแจ้งเตือนผู้คนถึงการเปลี่ยนแปลงหรือสร้างหลักฐานการตรวจสอบว่าใครเปลี่ยนแปลงอะไรและเมื่อใด มีอะไรอีกบ้าง?
ScottCher

@Scott - โดยพื้นฐานแล้วจะสามารถสร้างเกือบเหมือนหลักฐานการตรวจสอบสำหรับผู้พัฒนารายอื่น - ดังนั้นเรารู้ว่าเรามี schema dev ที่ทันสมัยที่สุดและการทดสอบและไซต์สดสามารถตรวจสอบได้อย่างง่ายดายเพื่อดูว่าสคีมานั้นทำงานอยู่
Toby

1
นี่เป็นคำถามที่ฉันเพิ่งโพสต์ แต่ฉันคิดว่าพวกเขาแตกต่างกันพอที่จะตอบคำถามทั้งสองdba.stackexchange.com/questions/64/…
Beth Whitezel

1
@ BitOff - ฉันเห็นด้วยและฉันคิดว่าคำตอบของฉันสำหรับคำถามที่คุณอ้างอิงยืนอยู่ที่นี่เช่นกัน การใช้เครื่องมือเช่น PowerDesigner หรือ ERWin สามารถช่วยควบคุมเวอร์ชันการออกแบบฐานข้อมูล - ถ้าฐานข้อมูลเป็นแบบจำลองภายนอกและการเปลี่ยนแปลงทั้งหมดถูกวางแผนผ่านโมเดลคุณสามารถควบคุมและเผยแพร่การเปลี่ยนแปลงเหล่านั้นเพื่อตรวจสอบได้ดียิ่งขึ้น
ScottCher

1
ดู Liquibase หรือ Flyway
a_horse_with_no_name

คำตอบ:


44

เพียงไม่กี่นาทีที่ผ่านมาฉันตรวจสอบสิ่งนี้: ตารางที่ควรมีอยู่ในทุกโครงการที่มีฐานข้อมูลดูเหมือนง่ายพอที่จะนำไปใช้ในทางปฏิบัติลองดู:

มันเรียกว่า 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 เพื่อเปลี่ยนโครงสร้างฐานข้อมูลหรือทำการย้ายข้อมูลคุณควรเพิ่มแถวในตารางนั้นด้วย และทำสิ่งนั้นผ่านคำสั่งแทรกที่จุดเริ่มต้นหรือจุดสิ้นสุดของสคริปต์นั้น (ซึ่งกำหนดให้กับที่เก็บรหัสของโครงการ)

...


1
@ David - นี่เป็นคำถามเกือบจะเป็นสิทธิ์ แต่คุณสามารถอธิบายได้อย่างรวดเร็วว่าตารางสามารถตอบสนองต่อ VCS ของคุณได้อย่างไร เพียงแค่มีการถ่ายโอนข้อมูลด้วยตนเอง?
Toby

@Toby - ด้วยการปรับใช้สคริปต์ถูกวางใน SVN และผู้พัฒนาได้ระบุ SVN rev หรือ JIRA bug # - เรา (dbas) แทรกบันทึกย่อและ rev # ลงในตารางนี้ อย่างไรก็ตามในการรวมเข้าด้วยกันเราได้สร้างเว็บเพจเพื่อชี้ไปที่ตารางนี้โดยมีไฮเปอร์ลิงก์ไปยัง JIRA
David Hall

ใช่. โดยพื้นฐานแล้ว OP มีไว้ข้างหลัง - คุณใช้สคริปต์การปรับใช้ที่คุณใช้ในเวอร์ชันคุณไม่สามารถใช้งานได้จากเดลตาฐานข้อมูล ผู้ที่ทำงานในกรณีที่ด้อยลง (ง่าย) เท่านั้นคุณอาจต้องทำการแปลงหลายขั้นตอนเพื่ออัปเดตสคีมาซึ่งเครื่องมือไม่สามารถสร้างย้อนหลังได้ แต่สคริปต์การปรับใช้สามารถจัดการกับสิ่งนี้ได้
TomTom

23

ผมคิดว่าวิธีที่ดีที่สุดคือการมีฐานข้อมูลที่สร้างขึ้นเป็นส่วนหนึ่งของการสร้างกระบวนการของคุณ เก็บสคริปต์ทั้งหมดไว้ในการควบคุมซอร์สด้วยโค้ดที่เหลือและทุกคนมีหน้าที่รับผิดชอบต่อสภาพแวดล้อมของตนเอง

ความล้มเหลวนั้น RedGate มีเครื่องมือในการรวมการควบคุมแหล่งลงใน SSMSและSQL Compareเป็นประโยชน์สำหรับการเปรียบเทียบ / การซิงโครไนซ์สกีมา MS SQL Server Visual Studio Database Edition ยังมีเครื่องมือเปรียบเทียบสคีมาในตัวอีกด้วย

คำถามอีกข้อหนึ่งนำฉันไปที่Migrator Dot Netซึ่งฉันจะเริ่มตรวจสอบในช่วงเวลาว่างมากมาย ดูเหมือนว่าเป็นวิธีที่ดี แต่อาจเป็นการลงทุนครั้ง / ค่าใช้จ่ายมากกว่าที่คุณเต็มใจจะทำ


"รุ่นฐานข้อมูล" ของ Visual Studio เคยเป็นผลิตภัณฑ์ที่แยกต่างหาก แต่ตอนนี้รวมอยู่ในรุ่นต่างๆรวมถึง Team Server ส่วนตัวฉันชอบเครื่องมือ RedGate (การเปรียบเทียบ SQL) เพื่อทำให้พวกเขาซิงค์
Tangurena

12

eiefai กล่าวแล้วตารางที่ควรมีอยู่ในทุกโครงการที่มีฐานข้อมูล นี่เป็นบล็อกโพสต์ที่ยอดเยี่ยม แต่ IMO เป็นเพียงส่วนหนึ่งของวิธีการแก้ปัญหาการทำงานสำหรับการควบคุมการแก้ไขฐานข้อมูล ฉันคิดว่าความพยายามใด ๆ ที่จะ "ตอบ" คำถามนี้ในโลกแห่งความเป็นจริงจำเป็นต้องพิจารณาข้อมูลอื่น ๆ เกี่ยวกับ VCS และฐานข้อมูล:


8

ฉันคิดว่ามีมุมที่แตกต่างกันสองสามข้อ ฉันเชื่อว่ามุมแรกของเครื่องมือจะแตกต่างกันไปตามแพลตฟอร์มและความชอบส่วนตัว ตัวอย่างตรงประเด็น: ฉันใช้โครงการฐานข้อมูลใน 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


5

SchemaCrawlerเป็นเครื่องมือของฉันในการสร้างไฟล์ข้อความที่มีวัตถุคีมาฐานข้อมูลทั้งหมด ฉันออกแบบเอาต์พุตข้อความนี้ให้สามารถอ่านได้ทั้งมนุษย์และ diff- สามารถเทียบกับเอาต์พุตที่คล้ายกันจากเซิร์ฟเวอร์อื่น

ในทางปฏิบัติสิ่งที่ฉันได้พบคือการส่งออกไฟล์ข้อความของสคีมาฐานข้อมูลจะมีประโยชน์เมื่อทำในฐานะส่วนหนึ่งของบิลด์ ด้วยวิธีนี้คุณสามารถตรวจสอบไฟล์ข้อความลงในระบบควบคุมซอร์สโค้ดของคุณและมีประวัติรุ่นว่าสคีมาของคุณมีวิวัฒนาการไปอย่างไรเมื่อเวลาผ่านไป SchemaCrawler ได้รับการออกแบบให้ทำงานอัตโนมัติเช่นกันจากบรรทัดคำสั่ง


สำหรับ oracle ดูcode.google.com/p/oracle-ddl2svn
popalka
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.