PlusMagi's Blog By Pitt Phunsanit Backend,Database Wifelike (ฉันเคยเป็นมนุษย์เมียนะ)​

Wifelike (ฉันเคยเป็นมนุษย์เมียนะ)​

หัวข้อที่ว่าด้วยการเปลี่ยนแปลงอัตลักษณ์อย่างลึกซึ้ง หรือความรู้สึกของการ ‘เคยเป็น’ แต่ตอนนี้ไม่ใช่แล้ว’ (Wifelike) เป็นปรากฏการณ์ที่ซับซ้อนทางจิตวิทยา แต่เมื่อเรานำมาวิเคราะห์ด้วยมุมมองของ System Architecture เราจะพบคำตอบเชิงเทคนิคที่ทรงพลัง นั่นคือเรื่องของการจัดการ ‘State’ และ Schema Evolution

ในโลกของฐานข้อมูล PostgreSQL ตัวตนของข้อมูล (Data Identity) ไม่ได้คงที่ การเปลี่ยนแปลงสถานะของข้อมูลขนาดใหญ่จึงเป็นภารกิจที่ต้องใช้ความแม่นยำสูง มันไม่ใช่แค่การเพิ่มคอลัมน์ใหม่ แต่คือการกำหนดรากฐานใหม่ให้กับโครงสร้างข้อมูลทั้งหมด ซึ่งเราสามารถเปรียบเทียบได้กับการกำหนดตัวตนใหม่ของ ‘ระบบ’ ได้อย่างสมบูรณ์

From Monolith to Structured State: การกำหนดตัวตนใหม่ใน PostgreSQL

หากเรามองว่าข้อมูลผู้ใช้คือระบบ Monolithic ที่มีโครงสร้างเดิมๆ การเปลี่ยนแปลงสถานะ (State Transition) ที่รุนแรง เช่น การเปลี่ยนจากข้อมูลที่เก็บเป็นข้อความดิบ (Raw Text) ไปเป็นโครงสร้างที่ซับซ้อน (Structured Array หรือ JSONB) จำเป็นต้องใช้กลไกการอัปเดตที่ระมัดระวัง

ใน PostgreSQL เราสามารถจำลองการ ‘เกิดใหม่’ ของตัวตนข้อมูลนี้ได้ด้วยคำสั่ง UPDATE ที่ทำงานร่วมกับฟังก์ชันการแปลงข้อมูล (Casting and Transformation Functions) เพื่อให้แน่ใจว่าข้อมูลเก่าจะถูกทำความสะอาดและจัดเก็บในรูปแบบที่เหมาะสมกับสถานะใหม่

ตัวอย่างการเปลี่ยนผ่านสถานะข้อมูล (State Transition Example)

สมมติว่าเรามีตาราง user_profiles ที่เก็บข้อมูลทักษะของผู้ใช้ในรูปแบบข้อความที่ยังไม่เป็นระเบียบ (Comma-separated string) ซึ่งเป็น ‘ตัวตนเก่า’ เราต้องการเปลี่ยนมันให้เป็น Array ที่เป็นโครงสร้างที่ชัดเจน (The New Self)

SQL

SQL

-- 1. ตรวจสอบสถานะเดิม (Old State: Unstructured Text) -- SELECT user_id, attributes FROM user_profiles; -- 2. การแปลงสถานะ: ใช้ string_to_array เพื่อเปลี่ยนข้อความให้เป็น Array -- UPDATE user_profiles SET attributes = array_agg(TRIM(unnest(string_to_array(attributes, ',')))) FROM (SELECT user_id, attributes FROM user_profiles) WHERE user_id = 1; -- 3. การกำหนดสถานะใหม่ (New State: Structured Array) -- นี่คือการกำหนดตัวตนใหม่ที่สมบูรณ์และสะอาด -- UPDATE user_profiles SET attributes = ARRAY['PostgreSQL', 'System Architecture', 'Technical SEO'] WHERE user_id = 1;

การดำเนินการข้างต้นแสดงให้เห็นว่า การเปลี่ยนผ่านจาก VARCHAR ไปเป็น TEXT[] หรือ JSONB ไม่ใช่แค่การเปลี่ยนชนิดข้อมูล แต่คือการ ‘ยกระดับ’ โครงสร้างของตัวตนข้อมูลให้สามารถรองรับความซับซ้อนที่เพิ่มขึ้น ซึ่งเป็นหัวใจสำคัญของการจัดการ State ในระบบขนาดใหญ่

บทสรุป: การควบคุมการเปลี่ยนแปลงตัวตนข้อมูล

ดังนั้น ไม่ว่าจะเป็นการเปลี่ยนแปลงอัตลักษณ์ทางจิตวิทยา หรือการอัปเกรดระบบฐานข้อมูล การเข้าใจถึงกลไกของการจัดการ State และการทำ Schema Evolution จึงเป็นสิ่งสำคัญอย่างยิ่ง ในฐานะ System Architect เราต้องมั่นใจว่าทุกการเปลี่ยนแปลงตัวตน (Identity Change) ของข้อมูลนั้นถูกควบคุมอย่างเป็นระบบ มีการทำ Migration อย่างสมบูรณ์ และมีโครงสร้างที่แข็งแกร่งรองรับ ‘ตัวตนใหม่’ เสมอ