Table ใน Access คืออะไร และควรแยกข้อมูลยังไง

Table ใน Access ควรแยกตามหน้าที่ของข้อมูล

Table ใน Access คือที่เก็บข้อมูลหลักของโปรแกรม ถ้าออกแบบ Table ดี งานข้างหลังอย่าง Query (การค้นหา/ดึงข้อมูล), Form (หน้าจอกรอกข้อมูล) และ Report (รายงานสำหรับพิมพ์) จะง่ายขึ้นมาก แต่ถ้าเริ่มจาก Table ที่รวมทุกอย่างไว้ตารางเดียว โปรแกรมจะเริ่มปวดหัวตั้งแต่ข้อมูลยังไม่เยอะครับ

บทความนี้จะคุยแบบมือใหม่ก่อนนะครับ ยังไม่ลงลึกถึง Normalization ทุกข้อ เอาให้เห็นภาพว่า Table ควรคิดจากอะไร และเราจะรู้ได้ยังไงว่าข้อมูลชุดไหนควรอยู่ด้วยกันหรือควรแยกออกจากกัน

Table ไม่ใช่แค่ช่องสี่เหลี่ยมให้พิมพ์ข้อมูล

เวลาคนเริ่มใช้ Access ใหม่ ๆ มักเปิด Table แล้วรู้สึกว่ามันก็คล้าย Excel คือมีแถว มีคอลัมน์ แล้วก็พิมพ์ข้อมูลลงไปได้

แต่แนวคิดจริง ๆ ต่างกันพอสมควรครับ

ใน Excel เรามักจัดตารางเพื่อให้คนอ่านง่าย คำนวณง่าย หรือทำรายงานตรงนั้นเลย แต่ใน Access Table คือที่เก็บข้อมูลให้ระบบเอาไปใช้ต่อ ข้อมูลใน Table จึงควรถูกจัดตาม "หน้าที่ของข้อมูล" มากกว่าจัดตามหน้าตารายงาน

เช่น ถ้าเราจะทำระบบขายของ อย่าเพิ่งคิดว่าหน้าใบเสร็จต้องมีช่องอะไรบ้าง แล้วสร้าง Table ตามหน้ากระดาษใบเสร็จทันที ให้ถามก่อนว่าข้อมูลจริง ๆ มีอะไรบ้าง

  • ลูกค้า
  • สินค้า
  • ใบสั่งซื้อ
  • รายการสินค้าในใบสั่งซื้อ

พอแยกแบบนี้ เราจะเริ่มเห็นว่าแต่ละชุดข้อมูลมีหน้าที่ของตัวเอง

สัญญาณว่าตารางเดียวเริ่มไม่พอ

ตอนเริ่มทำงานเล็ก ๆ ตารางเดียวอาจดูง่ายครับ เช่น Sale มีวันที่ขาย ชื่อลูกค้า เบอร์โทร ชื่อสินค้า จำนวน ราคา

แต่ถ้าใช้งานจริงไปสักพัก จะเริ่มเจออาการแบบนี้

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

ถ้าเริ่มมีอาการพวกนี้ แปลว่าตารางเดียวกำลังเก็บข้อมูลหลายหน้าที่ปนกันอยู่ครับ

ให้ถามว่า "ข้อมูลนี้เป็นเรื่องของใคร"

วิธีคิดง่าย ๆ เวลาออกแบบ Table คือดูว่า field แต่ละตัวเป็นเรื่องของอะไร (field คือช่องข้อมูลแต่ละช่อง หรือคอลัมน์ใน Table เช่น ชื่อลูกค้า เบอร์โทร ราคา)

ตัวอย่าง field เหล่านี้

  • CustomerName
  • CustomerPhone
  • ProductName
  • UnitPrice
  • OrderDate
  • Quantity

ถ้าถามว่า CustomerPhone เป็นเรื่องของใคร คำตอบคือเป็นเรื่องของลูกค้า ไม่ใช่เรื่องของใบสั่งซื้อโดยตรง เพราะลูกค้า 1 คนอาจมีหลายใบสั่งซื้อ แต่เบอร์โทรเป็นข้อมูลประจำตัวลูกค้า

ส่วน OrderDate เป็นเรื่องของใบสั่งซื้อ ไม่ใช่เรื่องของลูกค้า เพราะลูกค้าคนเดิมซื้อได้หลายวัน

ส่วน Quantity เป็นเรื่องของรายการสินค้าในใบสั่งซื้อ เพราะใบสั่งซื้อ 1 ใบอาจมีสินค้าหลายรายการ และแต่ละรายการมีจำนวนไม่เท่ากัน

พอคิดแบบนี้ Table จะเริ่มแยกเองครับ

ตัวอย่างแยก Table แบบง่าย

จากตารางขายเดียว เราอาจแยกเป็น 4 ตาราง

  • Customer เก็บข้อมูลลูกค้า
  • Product เก็บข้อมูลสินค้า
  • Order เก็บหัวเอกสาร เช่น วันที่ขาย ลูกค้าคนไหน
  • OrderDetail เก็บรายการสินค้า จำนวน ราคาในเอกสารนั้น

ข้อดีคือข้อมูลที่ซ้ำจะถูกย้ายไปอยู่ที่เดียว เช่น ข้อมูลลูกค้าอยู่ใน Customer ข้อมูลสินค้าอยู่ใน Product

เวลาลูกค้าเปลี่ยนเบอร์โทร เราแก้ที่ Customer ที่เดียว ไม่ต้องไล่แก้ทุกแถวขาย

ตัวอย่างการแยก Table ใน Access จากตารางเดียวเป็นหลายตาราง

อย่าสร้าง Table ตามหน้ารายงาน

มือใหม่มักเริ่มจากหน้ารายงานหรือใบเสร็จก่อน เช่น เห็นใบเสร็จมีชื่อร้าน ชื่อลูกค้า รายการสินค้า ยอดรวม ก็สร้าง Table ตามช่องบนใบเสร็จทั้งหมด

วิธีนี้ทำให้ Table ดูเหมือนเอกสาร แต่ไม่เหมาะกับการเก็บข้อมูลระยะยาวครับ

รายงานเป็น "ผลลัพธ์" ของข้อมูล ส่วน Table เป็น "แหล่งเก็บ" ของข้อมูล เราควรเก็บข้อมูลให้ถูกที่ก่อน แล้วค่อยใช้ Query หรือ Report ดึงออกมาเป็นหน้าตาที่ต้องการ

พูดอีกแบบคือ Table ไม่จำเป็นต้องหน้าตาเหมือนรายงานครับ

ควรมี Primary Key ตั้งแต่แรก

ทุก Table หลักควรมี Primary Key เช่น CustomerID, ProductID, OrderID

Primary Key คือรหัสประจำแถวที่ไม่ซ้ำกัน ทำให้ Access รู้ว่าแถวนี้คือข้อมูลตัวไหนแน่ ๆ ไม่ใช่เดาจากชื่อหรือข้อความ

แม้ตอนแรกเราจะยังไม่เข้าใจ Key ลึกมาก ก็ให้สร้าง field ID ไว้ก่อน เช่นใช้ AutoNumber เป็น Primary Key ภายในระบบ แล้วค่อยมีรหัสที่ผู้ใช้เห็นแยกอีก field ถ้าจำเป็น

สรุป

Table ใน Access ควรถูกออกแบบจากหน้าที่ของข้อมูล ไม่ใช่จากหน้าตา Excel หรือหน้ารายงาน

ถ้าข้อมูลชุดหนึ่งมีตัวตนของตัวเอง เช่น ลูกค้า สินค้า ใบสั่งซื้อ ก็ควรแยกเป็น Table ของตัวเอง แล้วใช้ Key เชื่อมกันแทนการพิมพ์ข้อมูลซ้ำ

เริ่มต้นอาจดูเหมือนมีหลายตารางกว่าเดิม แต่พอทำ Query, Form และ Report ต่อ จะรู้ว่าการแยก Table ให้ถูกตั้งแต่แรกช่วยประหยัดเวลาตอนแก้งานได้มากครับ

บทความที่เกี่ยวข้อง

คำถามที่พบบ่อย

Table ใน Access เหมือนตาราง Excel ไหม

หน้าตาคล้ายกัน แต่แนวคิดไม่เหมือนกัน Excel มักใช้ตารางเพื่อคำนวณหรือดูข้อมูลตรงหน้า ส่วน Table ใน Access คือที่เก็บข้อมูลของระบบ และมักเชื่อมกับ Table อื่นผ่าน Key

ควรเริ่มสร้าง Table กี่ตารางดี

ให้เริ่มจากกลุ่มข้อมูลจริงในงานก่อน เช่น ลูกค้า สินค้า ใบสั่งซื้อ รายการสินค้า ไม่จำเป็นต้องเยอะตั้งแต่แรก แต่ไม่ควรยัดข้อมูลคนละหน้าที่ไว้ตารางเดียว

ถ้าออกแบบ Table ผิด แก้ทีหลังได้ไหม

แก้ได้ แต่ถ้ามี Form Query Report ผูกไปแล้วจะต้องแก้ตามหลายจุด จึงควรคิดโครงสร้าง Table ให้พอถูกตั้งแต่ก่อนเริ่มทำหน้าจอ

บทความที่เกี่ยวข้องกัน: