Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

Entity Relationship Diagram (ERD) คืออะไร? สร้าง ERD อย่างไร?

บทความนี้อธิบายถึง Entity Relationship Diagram (ERD) ซึ่งเป็นแผนภาพที่ใช้ในการออกแบบฐานข้อมูล โดยเน้นที่การแสดง Entity, Attribute และ Relationship พร้อมทั้งสัญล...

Entity Relationship Diagram (ERD) คืออะไร? สร้าง ERD อย่างไร?

หลังจากที่เราได้ทำความเข้าใจถึงความสำคัญของการออกแบบฐานข้อมูลในบทที่แล้ว ในบทนี้เราจะมาเจาะลึกถึงเครื่องมือสำคัญที่ใช้ในการออกแบบฐานข้อมูล นั่นก็คือ Entity Relationship Diagram หรือ ERD ครับ ERD เป็นเหมือนพิมพ์เขียว (blueprint) ที่ช่วยให้เราเห็นภาพรวมของฐานข้อมูลทั้งหมด ความสัมพันธ์ระหว่างข้อมูลต่างๆ และยังช่วยให้เราสื่อสารกับทีมงานหรือผู้ที่เกี่ยวข้องได้อย่างเข้าใจตรงกันอีกด้วย

ERD คืออะไร?

Entity Relationship Diagram (ERD) คือ แผนภาพที่แสดงโครงสร้างของฐานข้อมูล โดยเน้นที่ Entity (เอนทิตี), Attribute (แอตทริบิวต์) และ Relationship (ความสัมพันธ์) ระหว่าง Entity เหล่านั้น

ลองมาทำความเข้าใจแต่ละคำศัพท์กันก่อนครับ:

  • Entity (เอนทิตี): คือ สิ่งที่เราสนใจจะเก็บข้อมูลเกี่ยวกับมัน อาจจะเป็นคน, สถานที่, สิ่งของ, หรือเหตุการณ์ ตัวอย่างเช่น ในระบบร้านค้า Entity อาจจะเป็น "ลูกค้า", "สินค้า", "พนักงาน", หรือ "ใบสั่งซื้อ"
  • Attribute (แอตทริบิวต์): คือ คุณสมบัติหรือรายละเอียดของ Entity แต่ละตัว ตัวอย่างเช่น Entity "ลูกค้า" อาจมี Attribute เป็น "ชื่อ", "ที่อยู่", "เบอร์โทรศัพท์", หรือ "อีเมล"
  • Relationship (ความสัมพันธ์): คือ ความเชื่อมโยงระหว่าง Entity ต่างๆ ตัวอย่างเช่น "ลูกค้า" ทำ "ใบสั่งซื้อ" หรือ "สินค้า" ถูกบรรจุใน "ใบสั่งซื้อ"

สัญลักษณ์ที่ใช้ใน ERD

ERD มีสัญลักษณ์มาตรฐานที่ใช้ในการแสดง Entity, Attribute และ Relationship ดังนี้:

  • Entity: แสดงด้วยสี่เหลี่ยมผืนผ้า
  • Attribute: แสดงด้วยวงรี
  • Relationship: แสดงด้วยรูปสี่เหลี่ยมข้าวหลามตัด
  • เส้น: ใช้เชื่อมโยง Entity กับ Attribute และ Entity กับ Relationship

นอกจากนี้ยังมีสัญลักษณ์ที่ใช้แสดง Cardinality (จำนวนความสัมพันธ์) ซึ่งจะบอกว่า Entity หนึ่งๆ สามารถมีความสัมพันธ์กับ Entity อื่นได้กี่ครั้ง Cardinality ที่พบบ่อยมีดังนี้:

  • One-to-One (1:1): Entity หนึ่งมีความสัมพันธ์กับ Entity อื่นได้เพียงหนึ่งเดียวเท่านั้น
  • One-to-Many (1:N): Entity หนึ่งมีความสัมพันธ์กับ Entity อื่นได้หลายครั้ง
  • Many-to-One (N:1): Entity หลายตัวมีความสัมพันธ์กับ Entity อื่นได้เพียงหนึ่งเดียว
  • Many-to-Many (N:N): Entity หลายตัวมีความสัมพันธ์กับ Entity อื่นได้หลายครั้ง

Cardinality จะถูกแสดงด้วยสัญลักษณ์ที่ปลายเส้นเชื่อมต่อระหว่าง Entity กับ Relationship เช่น:

  • One (1): ขีดเดียว (|)
  • Zero or One (0..1): วงกลมและขีด (o|)
  • Many (N หรือ *): ตีนกา (crow's foot)

ดังนั้น One-to-Many จะถูกแสดงด้วยขีดเดียวที่ Entity ฝั่ง One และตีนกาที่ Entity ฝั่ง Many

สร้าง ERD อย่างไร? (Step-by-Step)

เราจะมาลองสร้าง ERD อย่างง่ายสำหรับระบบร้านค้ากันครับ

  1. ระบุ Entity: ขั้นตอนแรกคือการระบุ Entity ที่สำคัญในระบบร้านค้าของเรา ในที่นี้เราจะเลือก Entity ดังนี้:
    • ลูกค้า (Customer)
    • สินค้า (Product)
    • ใบสั่งซื้อ (Order)
  2. ระบุ Attribute สำหรับแต่ละ Entity: สำหรับแต่ละ Entity ให้ระบุ Attribute ที่เราต้องการเก็บข้อมูล
    • ลูกค้า (Customer): ชื่อ, ที่อยู่, เบอร์โทรศัพท์, อีเมล, รหัสลูกค้า
    • สินค้า (Product): ชื่อสินค้า, รายละเอียด, ราคา, จำนวนคงเหลือ, รหัสสินค้า
    • ใบสั่งซื้อ (Order): รหัสใบสั่งซื้อ, วันที่สั่งซื้อ, สถานะ, รหัสลูกค้า
  3. ระบุ Relationship ระหว่าง Entity: กำหนดความสัมพันธ์ระหว่าง Entity ต่างๆ ในระบบร้านค้า
    • ลูกค้า (Customer) ทำ ใบสั่งซื้อ (Order)
    • ใบสั่งซื้อ (Order) ประกอบด้วย สินค้า (Product)
  4. กำหนด Cardinality: กำหนดจำนวนความสัมพันธ์ของแต่ละ Relationship
    • ลูกค้า (Customer) หนึ่งคน สามารถทำ ใบสั่งซื้อ (Order) ได้หลายใบ (One-to-Many)
    • ใบสั่งซื้อ (Order) หนึ่งใบ ประกอบด้วย สินค้า (Product) ได้หลายรายการ (One-to-Many)
  5. วาด ERD: นำข้อมูลทั้งหมดมาวาดเป็น ERD โดยใช้สัญลักษณ์ที่ได้อธิบายไป

    (เนื่องจากไม่สามารถแสดงรูปภาพใน HTML ได้ ผมจะอธิบายลักษณะของ ERD ที่ได้)

    เราจะมีสี่เหลี่ยมผืนผ้า 3 อันแทน Customer, Product และ Order แต่ละอันจะมีวงรีเชื่อมต่อแสดง Attribute ของมัน

    จะมีสี่เหลี่ยมข้าวหลามตัด 2 อัน อันแรกเชื่อมต่อ Customer กับ Order โดยมีป้ายกำกับว่า "ทำ" และมีเส้นเชื่อมต่อแบบ One-to-Many (ขีดเดียวที่ Customer และตีนกาที่ Order)

    อันที่สองเชื่อมต่อ Order กับ Product โดยมีป้ายกำกับว่า "ประกอบด้วย" และมีเส้นเชื่อมต่อแบบ One-to-Many (ขีดเดียวที่ Order และตีนกาที่ Product)

ตัวอย่าง ERD สำหรับระบบร้านค้า (แบบข้อความ)

+------------------+      1..*       +---------------+      1..*       +-----------------+
|    Customer      |-------------------|     Order     |-------------------|     Product     |
+------------------+      ทำ        +---------------+      ประกอบด้วย    +-----------------+
| customer_id      |                  | order_id      |                  | product_id      |
| name             |                  | customer_id   |                  | name            |
| address          |                  | order_date    |                  | description     |
| phone            |                  | status        |                  | price           |
| email            |                  |               |                  | stock           |
+------------------+                  +---------------+                  +-----------------+

คำอธิบาย:

  • `1..*` หมายถึง One-to-Many (1 ถึง หลาย)
  • `customer_id`, `order_id`, `product_id` คือ Primary Key ของแต่ละ Entity
  • `customer_id` ใน Entity `Order` คือ Foreign Key ที่อ้างอิงไปยัง Entity `Customer`

ข้อผิดพลาดที่พบบ่อยในการสร้าง ERD

  • ระบุ Entity ไม่ครบถ้วน: ทำให้ ERD ไม่ครอบคลุมข้อมูลทั้งหมดที่ต้องการเก็บ
  • ระบุ Attribute ไม่ถูกต้อง: ทำให้ข้อมูลที่เก็บไม่ตรงกับความต้องการ
  • กำหนด Relationship ผิดพลาด: ทำให้ความสัมพันธ์ระหว่างข้อมูลไม่ถูกต้อง
  • ลืมกำหนด Cardinality: ทำให้ไม่ทราบจำนวนความสัมพันธ์ที่ถูกต้อง
  • ไม่ปรับปรุง ERD เมื่อความต้องการเปลี่ยนแปลง: ทำให้ ERD ไม่สอดคล้องกับระบบจริง
  • ใช้ชื่อที่ไม่สื่อความหมาย: ทำให้เข้าใจยากและเกิดความสับสน

กรณีใช้งานจริง

สมมติว่าเรากำลังออกแบบฐานข้อมูลสำหรับระบบจัดการคอร์สเรียนออนไลน์ เราอาจเริ่มต้นด้วยการระบุ Entity หลักๆ เช่น "นักเรียน", "คอร์สเรียน", "ผู้สอน" และ "การลงทะเบียน" จากนั้นเราจะกำหนด Attribute สำหรับแต่ละ Entity เช่น "ชื่อนักเรียน", "ชื่อคอร์สเรียน", "รายละเอียดคอร์สเรียน", "วันที่ลงทะเบียน" และกำหนด Relationship เช่น "นักเรียน" ลงทะเบียน "คอร์สเรียน", "ผู้สอน" สอน "คอร์สเรียน" และกำหนด Cardinality เช่น "นักเรียน" หนึ่งคนสามารถลงทะเบียน "คอร์สเรียน" ได้หลายคอร์ส (One-to-Many) เป็นต้น

สรุป

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

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service