PlusMagi's Blog By Pitt Phunsanit Database เก็บหมายเลขโทรศัพท์กี่หลักดี

เก็บหมายเลขโทรศัพท์กี่หลักดี

การจัดเก็บข้อมูลหมายเลขโทรศัพท์ในระบบฐานข้อมูลเป็นหนึ่งในปัญหาคลาสสิกที่นักพัฒนาและ System Architect ต้องเผชิญ เพราะหมายเลขเหล่านี้ไม่ได้เป็นเพียงแค่ตัวเลข แต่ยังเป็นข้อมูลที่มีรูปแบบ (Format) และมีความยาวที่หลากหลาย ตั้งแต่หมายเลขภายในประเทศไปจนถึงหมายเลขระดับสากล

ในบริบทของ PostgreSQL และการออกแบบฐานข้อมูลที่ถูกต้อง (Database Design) การกำหนดจำนวนหลักที่ตายตัวจึงเป็นสิ่งที่ไม่เหมาะสมอย่างยิ่ง บทความนี้จะแนะนำแนวทางปฏิบัติที่ดีที่สุดในการเก็บหมายเลขโทรศัพท์ให้รองรับการใช้งานระดับสากลและมีความยืดหยุ่นสูงสุด

💡 หลักการทางเทคนิค: ทำไมห้ามใช้ประเภทตัวเลข (Numeric Type)?

ข้อผิดพลาดที่พบบ่อยที่สุดคือการเลือกใช้ประเภทข้อมูลตัวเลข (เช่น INTEGER หรือ BIGINT) ในการเก็บหมายเลขโทรศัพท์ ซึ่งจะทำให้เกิดปัญหาสำคัญ 2 ประการ:

  1. การสูญเสียศูนย์นำหน้า (Leading Zeros): หากหมายเลขโทรศัพท์ใดมีศูนย์นำหน้า (เช่น 02-xxx-xxxx) เมื่อเก็บในรูปแบบตัวเลข ระบบจะตัดศูนย์เหล่านั้นทิ้งไป ทำให้ข้อมูลผิดพลาดทันที
  2. ข้อจำกัดของขนาดข้อมูล: ถึงแม้หมายเลขสากลจะยาวถึง 15 หลัก แต่การใช้ตัวเลขอาจเกินขีดจำกัดของประเภทข้อมูลมาตรฐาน

ดังนั้น คำตอบที่ถูกต้องที่สุดสำหรับ PostgreSQL คือการใช้ประเภทข้อมูล VARCHAR หรือ TEXT เสมอ เพื่อให้สามารถเก็บตัวอักษรและศูนย์นำหน้าได้อย่างสมบูรณ์

🌐 มาตรฐานสากลและการกำหนดความยาว (E.164 Standard)

ตามมาตรฐานสากล (E.164) หมายเลขโทรศัพท์ที่ใช้ในการสื่อสารระหว่างประเทศสามารถมีความยาวได้สูงสุด 15 หลัก (รวมรหัสประเทศ) ไม่ว่าจะเป็นประเทศไทย (+66) หรือประเทศอื่น ๆ การกำหนดขนาดของคอลัมน์ใน PostgreSQL จึงควรเผื่อความยาวสูงสุดนี้ไว้

🛠️ การออกแบบ Schema ใน PostgreSQL

เพื่อให้มั่นใจว่าระบบสามารถรองรับหมายเลขโทรศัพท์ได้ทุกรูปแบบ (ทั้งแบบมีเครื่องหมายขีด (-) หรือแบบไม่มี) เราควรกำหนดขนาดของคอลัมน์ให้เพียงพอต่อ 15 หลัก และควรเพิ่มการตรวจสอบความถูกต้อง (Validation) ด้วย CHECK CONSTRAINT

SQL

-- การสร้างตาราง contacts ที่เหมาะสมสำหรับการเก็บหมายเลขโทรศัพท์</code>
CREATE TABLE contacts (
    contact_id SERIAL PRIMARY KEY,
    full_name VARCHAR(255),
    phone_number VARCHAR(15) NOT NULL,
    -- เพิ่ม Check Constraint เพื่อจำกัดความยาวสูงสุดที่ 15 ตัวอักษร
    CONSTRAINT check_phone_length CHECK (LENGTH(phone_number) <= 15)
);

-- ตัวอย่างการแทรกข้อมูลที่ถูกต้อง (ใช้ VARCHAR)
INSERT INTO contacts (full_name, phone_number) VALUES 
('John Doe', '+1-555-1234567');

-- ตัวอย่างการแทรกข้อมูลที่ผิดพลาด (จะถูกปฏิเสธโดย Check Constraint)
-- INSERT INTO contacts (full_name, phone_number) VALUES ('Too Long', '1234567890123456');

✅ สรุปแนวปฏิบัติที่ดีที่สุด (Best Practices)

ในฐานะ Senior Architect การออกแบบที่ดีต้องคำนึงถึงความยืดหยุ่นและความแม่นยำของข้อมูลเป็นหลัก:

  1. Data Type: ใช้ VARCHAR(15) หรือ TEXT เสมอ
  2. Format: ควรบังคับให้ผู้ใช้ป้อนข้อมูลในรูปแบบมาตรฐานสากล (E.164) คือใส่รหัสประเทศนำหน้าเสมอ (เช่น +66 666 1234)
  3. Validation: ใช้ CHECK CONSTRAINT ในระดับฐานข้อมูลเพื่อป้องกันการป้อนข้อมูลที่เกินความยาวหรือมีรูปแบบที่ไม่ถูกต้อง

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

Exit mobile version