ในยุคที่ข้อมูลคือสินทรัพย์สำคัญที่สุด การบริหารจัดการข้อมูลทรัพยากรบุคคล (HR Data) อย่างมีระบบและแม่นยำจึงเป็นสิ่งจำเป็นอย่างยิ่ง โดยเฉพาะอย่างยิ่งการกำหนดโครงสร้างของ ชื่อตำแหน่งงาน (Job Title) และ ระดับความเชี่ยวชาญ (Level) ซึ่งเป็นรากฐานในการวางแผนกำลังคนและการกำหนดค่าตอบแทนที่ยุติธรรม
สำหรับนักพัฒนาระบบหรือผู้ที่ต้องจัดการฐานข้อมูลขนาดใหญ่ การใช้ PostgreSQL เข้ามาช่วยจัดเก็บและเชื่อมโยงข้อมูลเหล่านี้อย่างเป็นระบบ จะช่วยให้องค์กรสามารถดึงข้อมูลเชิงลึก (Insights) เกี่ยวกับโครงสร้างองค์กรได้อย่างรวดเร็วและเชื่อถือได้ บทความนี้จะเจาะลึกวิธีการออกแบบและจัดการข้อมูล Job Title และ Level ด้วยไวยากรณ์ของ PostgreSQL
🏗️ การออกแบบ Schema สำหรับ Job Title และ Level ใน PostgreSQL
การจัดการข้อมูล Job Title และ Level ควรถูกแยกออกเป็นตาราง (Tables) เพื่อให้เกิดความยืดหยุ่นและลดความซ้ำซ้อนของข้อมูล (Normalization) เราควรสร้างตารางหลักอย่างน้อย 2 ตาราง คือ job_roles สำหรับเก็บชื่อตำแหน่ง และ level_definitions สำหรับเก็บคำจำกัดความของระดับต่างๆ (เช่น Junior, Senior, Manager)
เราจะใช้คีย์หลัก (Primary Key) และคีย์นอก (Foreign Key) ในการเชื่อมโยงข้อมูลเหล่านี้เข้าด้วยกัน ทำให้มั่นใจได้ว่าทุกตำแหน่งงานที่ถูกบันทึกจะต้องอ้างอิงถึงระดับที่ถูกนิยามไว้แล้วเท่านั้น
💡 ตัวอย่างการสร้างตารางและ Query ใน PostgreSQL
สมมติว่าเรามีตาราง job_roles และ levels ที่เก็บข้อมูลโครงสร้างตำแหน่งงาน เราสามารถใช้คำสั่ง SQL เพื่อดึงข้อมูลที่เชื่อมโยงกันได้อย่างมีประสิทธิภาพ:
SQL
-- 1. สร้างตาราง Job Roles (โครงสร้างตำแหน่ง) และ Levels (ระดับ) --
CREATE TABLE job_roles (
job_id SERIAL PRIMARY KEY,
job_title VARCHAR(100) NOT NULL,
level_id INT NOT NULL,
department VARCHAR(50),
min_salary NUMERIC
);
CREATE TABLE levels (
level_id SERIAL PRIMARY KEY,
level_name VARCHAR(50) UNIQUE NOT NULL,
description TEXT
);
-- 2. ใส่ข้อมูลตัวอย่าง (Seed Data) --
INSERT INTO levels (level_name) VALUES ('Junior'), ('Senior'), ('Manager');
INSERT INTO job_roles (job_title, level_id, department, min_salary) VALUES
('Software Engineer', 2, 'Tech', 50000),
('Data Analyst', 1, 'Data', 30000);
-- 3. Query เพื่อดึง Job Title, Level และ Salary Band ที่เชื่อมโยงกัน --
SELECT
jr.job_title,
l.level_name AS job_level,
jr.department,
jr.min_salary
FROM
job_roles jr
JOIN
levels l ON jr.level_id = l.level_id
WHERE
jr.job_title = 'Software Engineer';
🚀 การประยุกต์ใช้ขั้นสูง: การจัดกลุ่มระดับ (Level Grouping)
ในบางกรณี เราอาจต้องการจัดกลุ่มระดับงานที่แตกต่างกันให้เป็นกลุ่มใหญ่เพื่อการรายงาน (Reporting) เช่น การรวม Junior และ Senior เข้าเป็นกลุ่ม ‘Technical’ เราสามารถใช้ฟังก์ชัน CASE ใน PostgreSQL เพื่อสร้างคอลัมน์ใหม่ที่แสดงถึงกลุ่มอาชีพได้โดยไม่ต้องแก้ไขโครงสร้างตาราง:
SQL
SELECT
job_title,
level_name,
CASE
WHEN level_name = 'Junior' THEN 'Entry Level'
WHEN level_name = 'Senior' THEN 'Intermediate'
WHEN level_name = 'Manager' THEN 'Leadership'
ELSE 'Unknown'
END AS career_group
FROM
job_roles jr
JOIN
levels l ON jr.level_id = l.level_id;
✅ บทสรุป: ความสำคัญของการจัดการข้อมูลโครงสร้าง
การจัดการ Job Title และ Level ด้วย PostgreSQL ไม่ได้เป็นเพียงการเก็บข้อมูล แต่เป็นการสร้างระบบความจริง (Single Source of Truth) สำหรับโครงสร้างองค์กร ข้อมูลที่ถูกจัดเก็บอย่างเป็นระเบียบด้วย Schema ที่เหมาะสม จะช่วยให้องค์กรสามารถคำนวณค่าตอบแทนที่ถูกต้อง วางแผนเส้นทางอาชีพ (Career Path) และทำการวิเคราะห์ความเหลื่อมล้ำของตำแหน่งงานได้อย่างแม่นยำ ซึ่งเป็นรากฐานสำคัญของการบริหารทรัพยากรบุคคลยุคดิจิทัล