メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

Data Types ใน PostgreSQL: ทำความเข้าใจชนิดข้อมูลต่างๆ

บทความนี้กล่าวถึงชนิดข้อมูล (Data Types) พื้นฐานใน PostgreSQL ซึ่งเป็นสิ่งสำคัญในการออกแบบฐานข้อมูล โดยเน้นที่ชนิดข้อมูล Integer, Text, Date, และ Boolean พร้อมท...

Data Types ใน PostgreSQL: ทำความเข้าใจชนิดข้อมูลต่างๆ

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

PostgreSQL รองรับชนิดข้อมูลที่หลากหลาย ตั้งแต่ข้อมูลพื้นฐานอย่างตัวเลขและข้อความ ไปจนถึงข้อมูลที่ซับซ้อนกว่า เช่น ข้อมูลวันที่และเวลา, ข้อมูลทางเรขาคณิต, และข้อมูล JSON เราจะมาดูกันว่าชนิดข้อมูลหลักๆ มีอะไรบ้าง และควรเลือกใช้อย่างไร

ชนิดข้อมูล Integer

ชนิดข้อมูล Integer ใช้สำหรับเก็บตัวเลขจำนวนเต็ม (ไม่มีทศนิยม) PostgreSQL มีชนิดข้อมูล Integer ให้เลือกหลายขนาด ซึ่งแต่ละขนาดใช้พื้นที่จัดเก็บข้อมูลต่างกัน และรองรับช่วงของตัวเลขที่ต่างกันด้วย การเลือกขนาดที่เหมาะสมจะช่วยประหยัดพื้นที่จัดเก็บข้อมูล

  • SMALLINT: ใช้พื้นที่ 2 ไบต์ รองรับช่วงตัวเลขตั้งแต่ -32,768 ถึง 32,767
  • INTEGER: ใช้พื้นที่ 4 ไบต์ รองรับช่วงตัวเลขตั้งแต่ -2,147,483,648 ถึง 2,147,483,647 (โดยทั่วไปมักใช้ชนิดนี้)
  • BIGINT: ใช้พื้นที่ 8 ไบต์ รองรับช่วงตัวเลขตั้งแต่ -9,223,372,036,854,775,808 ถึง 9,223,372,036,854,775,807

เหตุผลเชิงออกแบบ (Trade-offs): การเลือกใช้ SMALLINT แทน INTEGER เมื่อรู้ว่าข้อมูลที่เราจะเก็บมีค่าไม่เกินช่วงที่ SMALLINT รองรับ จะช่วยประหยัดพื้นที่จัดเก็บข้อมูลได้ แต่ถ้าข้อมูลมีโอกาสเกินช่วงที่กำหนด อาจทำให้เกิดข้อผิดพลาดได้ ดังนั้นควรพิจารณาช่วงของข้อมูลที่เราต้องการจัดเก็บอย่างรอบคอบ

ตัวอย่าง:

CREATE TABLE products (
    product_id SERIAL PRIMARY KEY, -- SERIAL เป็น shortcut สำหรับ INTEGER ที่สร้างลำดับตัวเลขให้อัตโนมัติ
    quantity SMALLINT
);

INSERT INTO products (quantity) VALUES (10);
INSERT INTO products (quantity) VALUES (1000);

ชนิดข้อมูล Text

ชนิดข้อมูล Text ใช้สำหรับเก็บข้อมูลที่เป็นข้อความ PostgreSQL มีชนิดข้อมูล Text ให้เลือก 3 แบบหลักๆ:

  • VARCHAR(n): ใช้เก็บข้อความที่มีความยาวไม่เกิน n ตัวอักษร (n คือตัวเลข) ถ้าพยายามเก็บข้อความที่ยาวกว่า n ตัวอักษร จะเกิดข้อผิดพลาด
  • TEXT: ใช้เก็บข้อความที่มีความยาวไม่จำกัด (ในทางปฏิบัติมีข้อจำกัดเรื่องขนาดหน่วยความจำ)
  • CHAR(n): ใช้เก็บข้อความที่มีความยาวคงที่ n ตัวอักษร ถ้าเก็บข้อความที่สั้นกว่า n ตัวอักษร PostgreSQL จะเติมช่องว่าง (space) ให้เต็ม

เหตุผลเชิงออกแบบ (Trade-offs):

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

ตัวอย่าง:

CREATE TABLE customers (
    customer_id SERIAL PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    address TEXT
);

INSERT INTO customers (first_name, last_name, address) VALUES ('John', 'Doe', '123 Main Street');

ชนิดข้อมูล Date

ชนิดข้อมูล Date ใช้สำหรับเก็บข้อมูลวันที่ PostgreSQL มีชนิดข้อมูล Date และ Time ให้เลือกหลายแบบ:

  • DATE: ใช้เก็บข้อมูลวันที่ (ปี, เดือน, วัน)
  • TIME: ใช้เก็บข้อมูลเวลา (ชั่วโมง, นาที, วินาที)
  • TIMESTAMP: ใช้เก็บข้อมูลวันที่และเวลา
  • TIMESTAMPTZ: ใช้เก็บข้อมูลวันที่และเวลา พร้อมกับ Time Zone

เหตุผลเชิงออกแบบ (Trade-offs):

  • DATE เหมาะสำหรับข้อมูลที่ต้องการเก็บเฉพาะวันที่ เช่น วันเกิด หรือวันที่สั่งซื้อ
  • TIME เหมาะสำหรับข้อมูลที่ต้องการเก็บเฉพาะเวลา เช่น เวลาเปิดทำการ หรือเวลาปิดทำการ
  • TIMESTAMP เหมาะสำหรับข้อมูลที่ต้องการเก็บทั้งวันที่และเวลา เช่น วันที่และเวลาที่สร้างรายการ หรือวันที่และเวลาที่แก้ไขรายการ
  • TIMESTAMPTZ เหมาะสำหรับข้อมูลที่เกี่ยวข้องกับ Time Zone ที่แตกต่างกัน เช่น ข้อมูลการประชุมที่เกิดขึ้นในหลายประเทศ การใช้ TIMESTAMPTZ จะช่วยให้การคำนวณเวลาถูกต้องแม่นยำ

ตัวอย่าง:

CREATE TABLE orders (
    order_id SERIAL PRIMARY KEY,
    order_date DATE,
    order_time TIME,
    created_at TIMESTAMP,
    updated_at TIMESTAMPTZ
);

INSERT INTO orders (order_date, order_time, created_at, updated_at) VALUES ('2023-10-27', '10:00:00', NOW(), NOW());

ชนิดข้อมูล Boolean

ชนิดข้อมูล Boolean ใช้สำหรับเก็บข้อมูลที่เป็นจริง (true) หรือเท็จ (false) PostgreSQL ใช้คำว่า BOOLEAN สำหรับชนิดข้อมูลนี้

ตัวอย่าง:

CREATE TABLE products (
    product_id SERIAL PRIMARY KEY,
    is_active BOOLEAN
);

INSERT INTO products (is_active) VALUES (TRUE);
INSERT INTO products (is_active) VALUES (FALSE);

ชนิดข้อมูลอื่นๆ

นอกจากชนิดข้อมูลที่กล่าวมาแล้ว PostgreSQL ยังมีชนิดข้อมูลอื่นๆ อีกมากมาย เช่น:

  • REAL: ใช้เก็บตัวเลขทศนิยมความแม่นยำเดี่ยว (single-precision floating-point number)
  • DOUBLE PRECISION: ใช้เก็บตัวเลขทศนิยมความแม่นยำคู่ (double-precision floating-point number)
  • NUMERIC: ใช้เก็บตัวเลขทศนิยมที่มีความแม่นยำสูง สามารถกำหนดจำนวนหลักและจำนวนตำแหน่งทศนิยมได้
  • JSON/JSONB: ใช้เก็บข้อมูลในรูปแบบ JSON (JavaScript Object Notation)
  • UUID: ใช้เก็บ Universally Unique Identifier (UUID) ซึ่งเป็นตัวระบุที่ไม่ซ้ำกันทั่วโลก
  • ARRAY: ใช้เก็บข้อมูลในรูปแบบ Array

การเลือกชนิดข้อมูลที่เหมาะสมเป็นสิ่งสำคัญในการออกแบบฐานข้อมูลที่มีประสิทธิภาพและถูกต้อง ควรพิจารณาประเภทของข้อมูล, ช่วงของข้อมูล, และความแม่นยำที่ต้องการ เพื่อเลือกชนิดข้อมูลที่เหมาะสมที่สุด

ในบทถัดไป เราจะเรียนรู้เกี่ยวกับการจัดการ Role และสิทธิ์การเข้าถึง (Permissions) ซึ่งเป็นส่วนสำคัญในการรักษาความปลอดภัยของฐานข้อมูลของเรา

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る