GORAGOD.com

เทคนิคการเลือกประเภทของข้อมูล SQL ที่ต้องการจัดเก็บ

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

การเลือกชนิดของข้อมูลที่จะจัดเก็บ จะมีผลโดยตรงกับความเร็วในการ ค้นหา และ Query ข้อมูล เนื่องจากฐานข้อมูลจะทำงานกับตัวเลขได้เร็วกว่า อักขระ เมื่อไรก็ตามที่เราอาจต้องมีการสอบถามข้อมูล ด้วยคำสั่ง SQL แล้วละก็ การเลือกประเภทของข้อมูลที่ถูกต้องจะทำให้การเขียน Query ง่ายขึ้นอย่างมาก
  • ข้อมูลที่เป็นตัวเลขเท่านั้น ควรเก็บเป็นชนิดตัวเลข เช่น int, float, double เป็นต้น ไม่ควรเก็บเป็นอักขระ เนื่องจากข้อมูลชนิดนี้ ในการเรียงลำดับจะทำการเรียงลำดับได้อย่างถูกต้อง และ สามารถนำข้อมูลที่จัดเก็บไปคำนวณต่อได้เลยโดยไม่ต้องแปลง
  • ข้อมูลที่เป็นตัวเลข แต่ อาจประกอบด้วยเลข 0 อยู่ด้านหน้าเช่น 0001 ข้อมูลประเภทนี้ถึงจะเป็นตัวเลขทั้งหมด แต่เนื่องจากต้องการจัดเก็บให้มีเลข 0 อยู่ด้านหน้าจึงไม่สามารถจัดเก็บเป็นตัวเลขได้ให้จัดเก็บเป็นอักขระแทน ในกรณ๊ที่มีความยาวของข้อความที่แน่นอน แนะนำให้จัดเก็บเป็น varchar แต่ถ้าไม่รู้อาจจัดเก็บเป็น text ก็ได้
  • ข้อมูลที่เป็นจำนวนเงิน แนะนำให้เก็บเป็น ประเภท double ครับ เนื่องจากข้อมูลประเภทนี้สามารถจัดเก็บข้อมูลประเภทจุดทศนิยมได้ (ถ้าจำนวนเงินไม่มากอาจใช้ float แทนได้) ข้อสังเกตุ ข้อมูลประเภทนี้จะมีการปัดเศษนะครับ เช่นหากข้อมูลที่ต้องการจัดเก็บเป็น 10.236 ข้อมูลที่ถูกจัดเก็บจะเป็น 10.24 (ในกรณีที่กำหนดจุดทศนิยมไว้สองหลัก) 
  • ข้อมูลตัวเลขที่ต้องใช้ในการคำนวณและมีจุดทศนิยมหลายๆหลัก เช่นข้อมูลทางวิทยาศาสตร์ ซึ่งไม่สามารถกำหนดจำนวนจุดทศนิยมได้ หรือ ต้องการให้เก็บเป็นข้อมูลจริง(ไม่มีการปัดเศษ) ให้เก็บข้อมูลเป็น decimal
  • ข้อมูลประเภท boolean หรือ set ผมแนะนำให้จัดเก็บเป็น tinyint มากกว่าเก็บเป็นประเภท enum ซึ่งสามารถเก็บ 1 แทน true หรือ yes และ เก็บ o แทน false หรือ no เนื่องจากผลลัพท์ของข้อมูลนี้จะสามารถนำไปใช้ต่อโดย PHP ง่ายสุด (ใน PHP 1=true และ 0=false) และเราอาจต้องเลือกเก็บเป็น enum หากเราต้องการใช้ข้อความในการค้นหา เช่น การเก็บข้อมูลของสินค้าเป็น new,hot,recommend จะทำให้การ query ประเภทของสินค้าในกลุ่มต่างๆทำได้ง่่ายกว่า และ สามารถสื่อสารได้เข้าใจกว่า เช่นหากต้องการเลือกสินค้าใหม่ เราอาจกำหนด URL ได้ว่า https://www.goragod.com/index.php?module=product&type=new ซึ่ง URL ที่ได้จะสื่อความหมายได้ดีกว่าการกำหนด URL เป็น type=1
  • ข้อมูลประเภท วันที่ ข้อมูลประเภทนี้ให้เลือกจัดเก็บไปตามความต้องการนำไปใช้ต่อ เช่น หากต้องการเก็บวันที่ เพื่อนำไปใช้คำนวณต่อด้วย PHP (เช่นต้องนำไปคำนวณวันหมดอายุ) แนะนำให้เก็บวันที่เป็นตัวเลข ซึ่งได้จากฟังก์ชั่น mktime() ของ PHP (Unix timestanp) เนื่องจากข้อมูลประเภทนี้สามารถนำไปคำนวณด้วย PHP ได้ทันที แต่หากข้อมูลที่จัดเก็บ จะต้องถูกนำไปใช้ใน Query ด้วย SQL เช่น การหารายการประจำเดือน มกราคม คศ. 2014 การจัดเก็บในรูป DATE หรือ DATETIME จะทำให้เราสามารถ เขียนคำสั่งได้ง่ายกว่า เช่น MONTH(create_date)=1 AND YEAR(create_date)=2014 ส่วนการเลือกว่าจะจัดเก็บในรูป DATE หรือ DATETIME ก็ให้เลือกตามที่ต้องการว่าจะจัดเก็บเวลาหรือไม่เท่านั้น
  • ข้อมูลที่เป็นตัวอักษรทั้งหลาย ถ้ารู้ขนาดความยาวที่แน่นอนให้จัดเก็บเป็น varchar แต่ถ้าไม่รู้หรือต้องการจัดเก็บข้อความยาวๆให้เก็บเป็น text (MySql จะทำงานกับ varchar ได้เร็วกว่า text)