ปรกติแล้วถ้าเราต้องออกแบบฐานข้อมูล เราก็จะมีโจทย์เป็นฉาก ๆ ที่ต้องเอามาคิด จากนั้นก็ร่างความคิดออกมาเป็นความสัมพันธ์ของตาราง ตามหลักการของ Database Normalization (อันแสนจะเข้าใจยาก) ทีนี้ถ้าเปลี่ยนใหม่ล่ะ เปลี่ยนเป็นว่าความสัมพันธ์ของตารางถูกวาดออกมาแล้ว แล้วเราต้องมาอธิบายความสัมพันธ์ดังกล่าวให้อยู่ในรูปของการพรรณนาแทน แบบนี้จะทำไงดี … งั้น มาลองดูกันดีกว่า โจทย์ – จงอธิบายภาพความสัมพันธ์ของตารางในภาพข้างล่างพอสังเขป กดเพื่อดูภาพขยาย
ผมกำลังทำงานอดิเรกสนุก ๆ ชิ้นหนึ่งอยู่ โดยวางแผนไว้ว่าจะต้องใช้เวลาในการออกแบบและจัดสร้างประมาณ 1 ปี เพราะต้องเขียนแผนธุรกิจ, เขียนพิมพ์เขียว, ออกแบบ Data Dictionary, ออกแบบ GUI, สร้างซอฟต์แวร์ ฯลฯ อือม ช่างเป็นงานอดิเรกที่กินเวลายาวนานจริง ๆ ทีนี้ที่จะเล่าให้อ่านกันก็คือการทำ Data Dictionary ซึ่งเป็นสิ่งที่ผมไม่ค่อยจะถนัดเท่าไหร่ เนื่องจากทุกวันนี้ผมยังท่องกฎของ Database Normalization ไม่ได้เลย ดังนั้น วิธีแก้ไขก็คือการใช้เครื่องมือเข้าช่วย ซึ่งเป็นโชคดีของผมที่มีผู้สาวจัดหาเครื่องมือมาให้ใช้ โดยเครื่องมือดังกล่าวมีชื่อว่า fabFORCE DBDesigner …มันเป็นเครื่องมือทุ่นแรงที่ดี เพราะถ้าไม่มีมัน การออกแบบ Data Dictionary คงสาหัสขึ้นอีกอักโข แถมข้อดีอีกอย่างหนึ่งของมันก็คือ มันสนับสนุน MySQL ซะด้วยสิ ยิ่งดีเข้าไปใหญ่!!! แต่เหนือสิ่งอื่นใด การออกแบบ Data Dictionary ก็ยังคงขึ้นกับจินตนาการของผู้ออกแบบอยู่ดี ดังนั้น ต่อให้มีเครื่องมือดีแค่ไหนก็ตาม .. แต่ทว่า .. หากจินตนาการของเราตีบตัน เครื่องมือก็ย่อมจะไม่สามารถช่วยเหลืออะไรเราได้อยู่ดี! [...]
หลังจากอ่านเอกสารเกี่ยวกับ Amazon S3, Amazon EC2 และ Amazon SimpleDB มาจนสมองน่วม ก็ทำให้รู้ว่าแสงสว่างรำไรยังมีอยู่!!! ถ้าอยากจะใช้ฐานข้อมูล MySQL ก็สามารถจะติดตั้งลงใน Amazon EC2 ได้ .. แต่ .. ต้องลงตัว MySQL Enterprise นะเอ้อ! แล้วก็ต้องจ่ายตังค์ให้กับความ Enterprise ของมันด้วย T-T ซึ่งคิดว่าคงไม่น้อย (ยังไม่ได้ตรวจราคา) แต่ถ้าไม่อยากจ่าย อยากจะใช้ Amazon SimpleDB ก็ได้ แต่งานนี้รับรองหลังแอ่นแน่ ๆ เพราะ Amazon SimpleDB มันไม่ได้เป็น RDBMS มันก็เลยไม่มีอะไร ๆ ที่ RDBMS ทั่ว ๆ ไปเขามี ซึ่งสิ่งที่ขาดหายไปและถือว่าร้ายแรงที่สุดก็คือ มันไม่มี INDEX อ่ะดิ! แล้วจะให้ทำ RDBMS เองเหรอ [...]
ผลลัพธ์อันเลวร้ายที่เกิดกับการ select ข้อมูลจาก table ใหญ่ ๆ ในฐานข้อมูลมีอยู่สถานเดียวนั่นก็คือ .. ช้าโคตร ๆ ๆ ๆ ๆ ยิ่งถ้ามีคนร่วมด้วยช่วยกัน select แล้วล่ะก็ ต้องบอกว่า .. ช้าโคตร ๆ ๆ ๆ ๆ ยกกำลังด้วยจำนวนคนที่ค้น!!! ดังนั้นหากเราไม่อยากจะเจอกับเรื่องเลวร้ายเช่นนี้ งั้นเรามาทราบกฎกันดีกว่า ว่าเราควรจะทำยังไงกันดี? กฎข้อแรก อย่าออกแบบตามหลักการ Normalization เพราะการแยกข้อมูลกระจายไว้ตาม table ต่าง ๆ ตามหลักการ Normalization นั้น มันดูดี๊ดูดีในทางทฤษฎี แต่มันใช้ไม่ได้เลยในทางปฏิบัติ โดยเฉพาะหากต้อง join table เยอะ ๆ ซึ่งมีข้อมูลมาก ๆ หรือใช้ subquery แล้วล่ะก็ … ไอ้ Normalization เนี่ยแหล่ะ มันจะรัดคอตัวมันเอง กฎข้อสอง [...]
จดไว้กันลืม เพราะผมไม่ค่อยได้ลงมาทำทางเทคนิคบ่อยนัก พอดีว่าต้องเอาข้อมูลมายัดใส่ฐานข้อมูล MySQL แต่บังเอิญว่าไม่ได้ทำนานแล้ว เลยทำผิด ๆ ถูก ๆ หลง ๆ ลืม ๆ ต้องลองหลายรอบกว่าจะได้ เลยคิดว่าเอามาสาธยายเป็นขั้นเป็นตอนไว้ดีกว่า เผื่อคนอื่นจะได้รับอานิสงค์ไปด้วย ขั้นตอนการ Import ไฟล์ UTF-8 เข้าฐานข้อมูล MySQL ด้วย phpMyAdmin เปิด Notepad++ แล้วเลือกเข้ารหัสเป็น “UTF-8 without BOM” สำเนาข้อมูลจาก Microsoft Excel มาใส่ไว้ใน Notepad++ แล้วบันทึก สร้างโครงสร้างตารางแบบ UTF-8 เตรียมไว้ในฐานข้อมูลด้วย phpMyAdmin ทำการ Import ไฟล์ UTF-8 without BOM ที่บันทึกเอาไว้เข้าฐานข้อมูล MySQL โดยบอกมันว่าไฟล์ที่จะนำเข้า เป็นไฟล์ที่เข้ารหัสแบบ Latin1 หรือ Cp1252 (ยุโรปตะวันตก) พอ [...]