การย้ายโครงสร้างฐานข้อมูล
พัฒนาสคีมาอย่างต่อเนื่อง
การย้ายโครงสร้างฐานข้อมูล เป็นบทเรียน Ruby Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ruby Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
ไมเกรชันคืออะไร
ไมเกรชัน คือไฟล์ภาษา Ruby ที่มีการกำหนดเวอร์ชันและอธิบายการเปลี่ยนแปลงโครงสร้างฐานข้อมูล เช่น การสร้างตารางหรือการเพิ่มคอลัมน์
- ไมเกรชันคือโค้ด จึงอยู่ภายใต้ระบบควบคุมเวอร์ชัน
- ทุกคนในทีมจะใช้การเปลี่ยนแปลงเดียวกันตามลำดับเดียวกัน
- คุณไม่ควรแก้ไขฐานข้อมูลด้วยตนเอง
การสร้างไมเกรชัน
เฟรมเวิร์กจะสร้างไฟล์ไมเกรชันให้คุณ ตัวอย่างเช่น rails generate migration CreateUsers จะสร้างไฟล์ที่มีเวลาประทับไว้ใน db/migrate/ เวลาประทับจะกำหนดลำดับที่ไมเกรชันทำงาน
การสร้างตาราง
ไมเกรชันจะกำหนดคำสั่ง change create_table จะสร้างตาราง ส่วน t.timestamps จะเพิ่ม created_at และ updated_at โดยอัตโนมัติ
class CreateUsers < ActiveRecord::Migration[7.1]
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
endชนิดคอลัมน์
ชนิดคอลัมน์ทั่วไปจะสอดคล้องกับชนิดข้อมูลในฐานข้อมูล:
stringข้อความสั้นtextข้อความยาวinteger,float,decimalตัวเลขbooleanค่าจริง/เท็จdatetime,dateค่าเวลา
create_table :products do |t|
t.string :title
t.text :description
t.decimal :price
t.boolean :active
t.timestamps
endการเรียกใช้ไมเกรชัน
rails db:migrate จะใช้ไมเกรชันทั้งหมดที่รอดำเนินการและอัปเดต schema.rb ระบบจะบันทึกไมเกรชันที่ทำงานแล้วไว้ในตาราง schema_migrations เพื่อให้แต่ละรายการทำงานเพียงครั้งเดียว
การเพิ่มคอลัมน์
หากต้องการขยายตารางที่มีอยู่ ให้สร้างไมเกรชันแล้วใช้ add_column คุณต้องระบุตาราง ชื่อคอลัมน์ ชนิดข้อมูล และตัวเลือก
class AddAgeToUsers < ActiveRecord::Migration[7.1]
def change
add_column :users, :age, :integer, default: 0
end
endการย้อนกลับ
rails db:rollback จะยกเลิกไมเกรชันล่าสุด ระบบจะย้อนกลับคำสั่ง change โดยอัตโนมัติเมื่อการดำเนินการนั้นย้อนกลับได้ เช่น add_column หรือ create_table
การเปลี่ยนแปลงที่ย้อนกลับไม่ได้
การดำเนินการบางอย่างไม่สามารถย้อนกลับโดยอัตโนมัติได้ เช่น การเรียกใช้คำสั่งเอสคิวแอลดิบ หรือการลบคอลัมน์ที่มีข้อมูลอยู่ ในกรณีเหล่านี้ ให้กำหนดคำสั่ง up และ down อย่างชัดเจน เพื่อให้ระบบทราบวิธีย้อนกลับการเปลี่ยนแปลง
class ChangeData < ActiveRecord::Migration[7.1]
def up
execute "UPDATE users SET active = TRUE"
end
def down
execute "UPDATE users SET active = FALSE"
end
endดัชนี
เพิ่มดัชนีเพื่อเร่งการค้นหาคอลัมน์ที่คุณสืบค้นบ่อย เช่น คีย์ต่างประเทศหรืออีเมลที่ใช้เข้าสู่ระบบ ใช้ unique: true เพื่อบังคับให้ข้อมูลไม่ซ้ำกันในระดับฐานข้อมูลด้วย
class AddIndexToUsersEmail < ActiveRecord::Migration[7.1]
def change
add_index :users, :email, unique: true
end
endไมเกรชันกับ schema.rb
ไมเกรชันคือประวัติของการเปลี่ยนแปลง ส่วน schema.rb คือภาพรวมปัจจุบัน นักพัฒนาที่เพิ่งเข้าทีมสามารถเรียกใช้ rails db:schema:load เพื่อสร้างฐานข้อมูลจากภาพรวมนี้ได้ทันที แทนการเรียกใช้ไมเกรชันทั้งหมดทีละรายการ
แนวทางปฏิบัติที่ดี
ทำให้ไมเกรชันปลอดภัย:
- อย่าแก้ไขไมเกรชันที่เคยทำงานในสภาพแวดล้อมที่ใช้ร่วมกันแล้ว ให้เขียนไมเกรชันใหม่
- ให้ไมเกรชันแต่ละรายการมุ่งเน้นการเปลี่ยนแปลงเพียงอย่างเดียว
- เพิ่มข้อจำกัดในระดับฐานข้อมูล เช่น null: false และดัชนี เพื่อรักษาความถูกต้องของข้อมูล
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับไมเกรชัน
ทบทวน: ไมเกรชัน
คุณได้เรียนรู้วิธีปรับโครงสร้างให้เปลี่ยนแปลงได้อย่างปลอดภัยแล้ว:
- ไมเกรชันคือการเปลี่ยนแปลงโครงสร้างที่มีการกำหนดเวอร์ชันและบันทึกไว้ในระบบควบคุมเวอร์ชัน
create_table,add_columnและadd_indexใช้กำหนดโครงสร้างตารางdb:migrateใช้การเปลี่ยนแปลง ส่วนdb:rollbackใช้ย้อนกลับ- ใช้
up/downสำหรับการเปลี่ยนแปลงที่ย้อนกลับไม่ได้ schema.rbคือภาพรวมปัจจุบัน
ถัดไป เราจะเชื่อมโมเดลเข้าด้วยกันด้วยความสัมพันธ์
คำถามที่พบบ่อย
บทเรียน “การย้ายโครงสร้างฐานข้อมูล” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การย้ายโครงสร้างฐานข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ruby Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การย้ายโครงสร้างฐานข้อมูล”
พัฒนาสคีมาอย่างต่อเนื่อง คุณปฏิบัติ Ruby Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ruby Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ruby Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การย้ายโครงสร้างฐานข้อมูล” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Ruby Academy นี้ได้ไหม
ได้ บทเรียน Ruby Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน Active Record
- การย้ายโครงสร้างฐานข้อมูล
- ความสัมพันธ์
- การตรวจสอบความถูกต้องและคำค้น