What is ORM?
Object-Relational Mapping (ORM) เป็นเทคนิคหนึ่งที่ช่วยให้เราสามารถเข้าถึงข้อมูลในฐานข้อมูลได้โดยไม่ต้องเขียน SQL โดยตรง แต่เราจะเข้าถึงข้อมูลผ่าน Object ที่เราสร้างขึ้นมาแทน ซึ่งเราสามารถเข้าถึงข้อมูลได้ผ่านภาษาโปรแกรมที่เราใช้ในการเขียนโปรแกรมได้เลย
ORM Library
แน่นอนว่า ORM มันก็เป็นแค่เทคนิค เราจำเป็นที่จะต้องใช้ Library ในการใช้งาน โดยแต่ละภาษาก็จะมี ORM Library ที่แตกต่างกันออกไป
Example
มาดูตัวอย่างการใช้งาน แบบ pseudo code กัน
อย่างเช่น เรา มี class ชื่อ Book และเราต้องการค้นหาหนังสือทั้งหมดที่เขียนโดย Linus
ถ้าเราไม่ได้ใช้ ORM เราจะเขียนโค้ดแบบนี้
แต่ถ้าเราใช้ ORM เราจะเขียนโค้ดแบบนี้
จะเห็น code สั้นขึ้นและเข้าใจง่ายมาก ๆ
จากนั้น ORM จะทำการแปลงเป็นคำสั่ง SQL ให้เราโดยอัตโนมัติ เพียงแค่นี้ก็ได้ข้อมูลจาก Database ละ
Pros and Cons
ORM ช่วยประหยัดเวลาได้มาก
- เราเขียน Data Model แค่ครั้งเดียว และง่ายต่อการอัพเดท และการแก้ไข และการนำโค้ดไปใช้ซ้ำ
- มันทำงานอัตโนมัติ ตั้งแต่การจัดการฐานข้อมูล ไปจนถึง I18N
- มันบังคับให้เราเขียนโค้ดแบบ MVC ซึ่งทำให้โค้ดสะอาดขึ้น
- เราไม่ต้องเขียน SQL ที่เขียนไม่ดีอีกต่อไป (ส่วนใหญ่ Web programmer ไม่เก่งเรื่อง SQL เพราะ SQL ถูกจัดการเหมือนภาษาย่อย ๆ ซึ่งในความเป็นจริง SQL เป็นภาษาที่มีความซับซ้อนและมีความสามารถมาก)
- การใช้ prepared statements หรือการทำ transaction มันง่ายเหมือนการเรียก method
การใช้ ORM จะมีความยืดหยุ่น
- มันเขียนโค้ดได้ตามธรรมชาติของภาษาที่เราใช้ (เพราะมันเป็นภาษาของเราเอง)
- มันทำให้เราสามารถเปลี่ยนฐานข้อมูลได้ตามที่เราต้องการ
- มันทำให้เราสามารถใช้ Model ได้ทุกที่ที่เราต้องการ
- มันทำให้เราสามารถใช้ OOP ได้เต็มที่ เช่น การสืบทอดข้อมูล โดยไม่ต้องเจอปัญหา
แต่ ORM ก็มีข้อเสียเหมือนกัน
- เราต้องเรียนรู้มัน และ ORM ไม่ใช่เครื่องมือที่เบา ๆ
- เราต้องตั้งค่ามัน มันก็เหมือนกับข้อด้านบน
- ประสิทธิภาพของมันไม่ดีเท่า SQL ที่เราเขียนเอง แต่ก็ยังดีในการใช้งานปกติ
- มันทำให้เราไม่สามารถเข้าถึงฐานข้อมูลได้โดยตรง ซึ่งมันไม่เป็นไรถ้าเรารู้ว่ามันทำงานอย่างไร แต่มันก็เป็นกับคนที่เพิ่งเริ่มเขียนโปรแกรม
Library
นี่ก็เป็น Library ที่นิยมใช้กัน เลือกตามภาษาที่เราใช้ได้เลย
- Java: Hibernate.
- PHP: Propel หรือ Doctrine
- Python: the Django ORM หรือ SQLAlchemy
- C#: NHibernate หรือ Entity Framework
ถ้าคุณต้องการลองใช้ ORM Library ในการเขียนเว็บ คุณควรจะใช้ Framework ที่มี ORM มาให้เลย เช่น
สุดท้ายนี้ อย่าพยายามที่จะเขียน ORM ของตัวเอง ยกเว้นว่าคุณต้องการเรียนรู้อะไรบางอย่าง นี่เป็นงานที่ใช้เวลาและงานที่ใหญ่มาก ๆ และ ORM ที่เก่ามีการพัฒนามานานแล้วก่อนที่จะเป็นได้มาตรฐานที่ดี