PlusMagi's Blog By Pitt Phunsanit Database การทำ ERD Physical Schema Specification: ออกแบบตาราง Relation, Compound Keys และ Indexing Rules พร้อมตัวอย่าง

การทำ ERD Physical Schema Specification: ออกแบบตาราง Relation, Compound Keys และ Indexing Rules พร้อมตัวอย่าง

ในฐานะ System Architect การเปลี่ยนผ่านจากแบบจำลองข้อมูลเชิงแนวคิด (Conceptual Data Model) ไปสู่โครงสร้างที่พร้อมใช้งานจริงบนฐานข้อมูล (Physical Schema) คือขั้นตอนที่สำคัญที่สุดและละเอียดอ่อนที่สุด การออกแบบ Physical Schema ที่ผิดพลาด ไม่ว่าจะเป็นการเลือกชนิดข้อมูล (Data Type) ที่ไม่เหมาะสม หรือการละเลยการกำหนดกลไกการเพิ่มประสิทธิภาพ จะส่งผลโดยตรงต่อประสิทธิภาพ (Performance) และความสามารถในการขยายตัว (Scalability) ของระบบในระยะยาว

การทำ Physical Schema Specification ใน PostgreSQL

Physical Schema Specification คือการแปลงความสัมพันธ์เชิงตรรกะ (Logical Relation) ให้เป็นคำสั่ง SQL ที่ระบุรายละเอียดทางกายภาพอย่างครบถ้วน โดยเฉพาะอย่างยิ่งเมื่อใช้ PostgreSQL เราต้องให้ความสำคัญกับการกำหนดข้อจำกัด (Constraints) และการใช้ Data Type ที่เหมาะสมที่สุดเพื่อลดพื้นที่จัดเก็บและเพิ่มความเร็วในการประมวลผล

1. การกำหนด Primary Key และ Foreign Key (PK/FK)

PK และ FK คือรากฐานของการรักษาความสมบูรณ์ของข้อมูล (Referential Integrity) การกำหนด FK ใน PostgreSQL ต้องระบุถึงตารางและคอลัมน์ต้นทางอย่างชัดเจน เพื่อให้ระบบสามารถตรวจสอบความถูกต้องของข้อมูลข้ามตารางได้เสมอ

2. การจัดการ Compound Keys และ Indexing Rules

เมื่อตารางมีความสัมพันธ์ที่ซับซ้อน การใช้ Primary Key ที่ประกอบด้วยหลายคอลัมน์ (Compound PK) จะช่วยให้มั่นใจว่าไม่มีการซ้ำซ้อนของชุดข้อมูลนั้นๆ อย่างไรก็ตาม การกำหนด Index ไม่ได้หมายถึงการใส่ Index ทุกคอลัมน์ แต่ต้องพิจารณาจากรูปแบบการ Query ที่เกิดขึ้นบ่อยที่สุด (Query Patterns) เช่น หากมีการค้นหาข้อมูลตาม Student ID และ Semester Year บ่อยครั้ง ควรสร้าง Index ที่ครอบคลุมทั้งสองคอลัมน์นี้

ตัวอย่างการออกแบบ Schema ด้วย PostgreSQL

สมมติว่าเรากำลังออกแบบตาราง `enrollment` ที่บันทึกการลงทะเบียนเรียน ซึ่งต้องใช้ Student ID, Course ID และปีการศึกษาเป็นชุดคีย์หลัก (Compound PK) และเราต้องการ Index เพื่อเร่งความเร็วในการค้นหาข้อมูลการลงทะเบียนตามปีการศึกษาและนักเรียน:

SQL

-- 1. สร้างตารางหลัก (Course) และตารางลูก (Student) เพื่ออ้างอิง
CREATE TABLE student (
    student_id SERIAL PRIMARY KEY,
    student_name VARCHAR(100) NOT NULL
);

CREATE TABLE course (
    course_id SERIAL PRIMARY KEY,
    course_name VARCHAR(100) NOT NULL
);

-- 2. สร้างตาราง Enrollment ที่ใช้ Compound Key
CREATE TABLE enrollment (
    student_id INT NOT NULL,
    course_id INT NOT NULL,
    semester_year INT NOT NULL, -- ใช้เป็นส่วนหนึ่งของ Compound Key
    enrollment_date DATE DEFAULT CURRENT_DATE,

    -- กำหนด Compound Primary Key
    PRIMARY KEY (student_id, course_id, semester_year),

    -- กำหนด Foreign Keys เพื่อรักษา Referential Integrity
    FOREIGN KEY (student_id) REFERENCES student(student_id),
    FOREIGN KEY (course_id) REFERENCES course(course_id)
);

-- 3. สร้าง Index เพื่อเพิ่มประสิทธิภาพการ Query
-- สร้าง Index ที่ใช้บ่อยที่สุด: ค้นหาข้อมูลตามนักเรียนและปีการศึกษา
CREATE INDEX idx_student_year ON enrollment (student_id, semester_year);

-- การใช้ Index นี้จะช่วยเร่ง Query ที่มีเงื่อนไข WHERE student_id = X AND semester_year = Y;

บทสรุป: แนวทางปฏิบัติที่ดีที่สุด

การทำ Physical Schema Specification ไม่ใช่แค่การเขียนโค้ด SQL แต่คือการคิดเชิงสถาปัตยกรรมที่คำนึงถึงการใช้งานจริง (Operational Use Case) เสมอ นักพัฒนาควรใช้เครื่องมือช่วยวิเคราะห์ Query Pattern เพื่อระบุคอลัมน์ที่ควรทำ Index และควรพิจารณาใช้ Data Type ที่มีประสิทธิภาพสูงสุดตามที่ PostgreSQL รองรับ การออกแบบที่รอบคอบในขั้นตอนนี้จะช่วยให้ระบบฐานข้อมูลของคุณมีความเสถียร ปลอดภัย และสามารถรองรับการเติบโตของข้อมูลได้อย่างไร้รอยต่อ

Exit mobile version