ความหมายของ ORM และ Doctrine

ORM ย่อมาจาก Object / Relational Mapping หมายถึง การ map ข้อมูลในตารางข้อมูลของฐานข้อมูลให้อยู่ในรูปของ object-oriented language ซึงจะเป็นการสร้าง Database แบบเสมือนขึ้นให้มาอยู่ในรูป language programming ทำให้ไม่ต้องไปยุ่งกับ SQL Statement ซึ่งถ้ามีการเปลี่ยนแปลงแก้ไขต้องแก้ไขที่ตัวโปรแกรมแทน และการกระทำต่างๆยังคงเป็นแบบ Relational เหมือนเดิม เช่น มีตารางชื่อ product ก็จะแปลงมาเป็น class product คุณลักษณะ (attributes) ของตาราง product ก็จะถูแปลงมาเป็น object ใน class

เราไม่จำเป็นต้องยุ่งในส่วนของ SQL (SELECT, INSERT, UPDATE, DELETE) เลย แต่เราจะใช้ framework มาช่วยจัดการแปลงจากภาษาโปรแกรมมิ่งที่เราเขียน ไปเป็น SQL หรือ database ให้เราแทน  

สำหรับ framework นั้นก็มีหลายตัวในปัจจุบัน Hibernate, NHibernate, LINQ, SubSonic, Entity Framework, Active Record, Enterprise Library, symfony

โดยแต่ละตัวนั้นก็จะมี API ซึ่งเป็นตัวกลางในการทำหน้าที่ในการแปลงข้อมูลระหว่างฐานข้อมูลและ object รวมถึงคำสั่งพื้นฐานของการจัดการข้อมูลไม่ว่าจะเป็นการ Select,Insert,Update,Delete

ในที่นี้จะพูดถึง Symfony ซึ่งมีตัว API ที่ติดมาด้วยชื่อว่า Doctrine ในการจัดการเกี่ยว ORM

ตัว Symfony นั้นมีการทำงาน แบบ MVC (Model–view–controller) 

โดยในส่วนของ doctrine นั้นจะทำงานกับ Model ในการติดต่อกับ ฐานข้อมูล

เวลาที่เราต้องการจะสร้าง database table ขึ้นมา table นึง  เราไม่จำเป็นต้องเขียน SQL เพื่อ create table ขึ้นมาเลย  เราแค่เขียน   class ขึ้นมา  ซึ่ง  class นี้จะถูกเรียกว่า Entity Class จากนั้นก็กำหนด attribute ต่างๆ  ตามที่ต้องการลงไป  attribute นี้เราอาจจะมองว่ามันคือ column ของ table ก็ได้  ทีนี้ framework  มันก็จะเอา  entity class ที่เราเขียนไว้ไปแปลงเป็น table ให้เราเองครับ  
    การ map relation ต่างๆ เช่น One to One, One to Many หรือ Many to Many  เราอยากได้แบบไหน  เราก็เขียนลงไปใน  entity class นั้น  framework มันก็จะเอาไป map ให้เราเอง  มันจะสร้าง foreign key, primary key  ซึ่งเป็นความสัมพันธ์ต่างๆ ของ table ให้เองโดยอัตโนมัติ  
 
การอ่านค่าจาก table ขึ้นมาใช้   มันก็จะแปลงจากข้อมูลที่อยู่ในรูปของ row ไปเป็น object ของ row นั้นให้  ซึ่งไม่เหมือนกับการเขียน code แบบเดิมๆ  ที่ต้องเขียน code เพื่ออ่านค่ามาจาก database  และก็ค่อยจับค่าที่อ่านมาได้นั้นยัดเข้าไปใน object class เอง  ซึ่งมันก็ค่อนข้างลำบากอยู่เหมือนกันครับ  ถ้าระบบเราเป็นระบบที่ใหญ่มากๆ  การดูแลรักษา  หรือการแก้ไข code ก็จะเกิดความยุ่งยากขึ้นได้  เพราะ code ที่เราเขียนมันผูกกันไปมาเต็มไปหมด  ยิ่งถ้าแก้attribute ใน table หรือเปลี่ยนแปลงความสัมพันธ์ของ table ที  ก็ต้องมาตามแก้  Class  ที่อ้างไปถึง table นั้นๆ อีก

        พอเราหันมาใช้ ORM  มันก็จะช่วยให้งานเราสบายขึ้นเยอะ  เวลาแก้ attribute หรือความสัมพันธ์ใน Entity Class ตัว attribute หรือความสัมพันธ์ของ table ก็จะเปลี่ยนแปลงตามไปด้วย   เราอาจจะมองว่า entity class กับ database table มันคือตัวเดียวกันก็ได้ครับ  เพราะ framework  มันจะจัดการทำ mapping ให้เรา..

Credit : http://na5cent.blogspot.com/
กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
phpbb3 General Error mcp LINE: 193 ผู้รู้ช่วยด้วยครับ
โดย chornma พฤ 18 ก.ค. 2013 10:54 pm บอร์ด สอบถามปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
2
1497
ศ 19 ก.ค. 2013 9:10 am โดย chornma View Topic phpbb3 General Error mcp LINE: 193 ผู้รู้ช่วยด้วยครับ
ทำ GPS server รับข้อมูลจาก GPS tracker แล้วเก็บเป็นฐานข้อมูลแสดงกับ GoogleApi
โดย callmeos พฤ 18 ก.ค. 2013 10:43 pm บอร์ด Linux - Web Server
2
4282
ศ 19 ก.ค. 2013 1:45 pm โดย callmeos View Topic ทำ GPS server รับข้อมูลจาก GPS tracker แล้วเก็บเป็นฐานข้อมูลแสดงกับ GoogleApi
งานประจำวันที่ 18 กรกฎาคม 255
โดย M007 พฤ 18 ก.ค. 2013 10:13 am บอร์ด M007 - นางสาวชาลินี เกษรรัตน์
2
12
พฤ 18 ก.ค. 2013 9:56 pm โดย M007 View Topic งานประจำวันที่ 18 กรกฎาคม 255
งานประจำวันที่ 18 กรกฎาคม 2556
โดย M009 พฤ 18 ก.ค. 2013 10:10 am บอร์ด M009 - นายมารุต วิชญวรคุณ
4
18
ศ 19 ก.ค. 2013 10:26 am โดย M009 View Topic งานประจำวันที่ 18 กรกฎาคม 2556
ขายสายชาร์จ+adapter ของใหม่จากกล่องiphone 4s มี2ชุด 650บาท
โดย kitkatt พ 17 ก.ค. 2013 5:15 am บอร์ด Mobile Programming - Android, iOS, Window Phone
5
3799
ศ 19 ก.ค. 2013 7:13 pm โดย kitkatt View Topic ขายสายชาร์จ+adapter ของใหม่จากกล่องiphone 4s มี2ชุด 650บาท
B -ทดสอบไฟล์ import ไฟล์นี้หน่อย
โดย mindphp อ 16 ก.ค. 2013 11:36 pm บอร์ด DTC
4
15
พฤ 18 ก.ค. 2013 2:17 pm โดย tsukasaz View Topic B -ทดสอบไฟล์ import ไฟล์นี้หน่อย
avatar on memberlist 1.0.3 แสดง avatar หน้า member list
โดย M009 พฤ 18 ก.ค. 2013 10:40 am บอร์ด PHPBB3.0 Mod Review
0
2515
พฤ 18 ก.ค. 2013 10:40 am โดย M009 View Topic avatar on memberlist 1.0.3 แสดง avatar หน้า member list
[RC] Last Active Topics jQuery แสดงกระทู้ล่าสุดโดยใช้ jQuery
โดย M009 พ 17 ก.ค. 2013 10:19 am บอร์ด PHPBB3.0 Mod Review
0
3348
พ 17 ก.ค. 2013 10:19 am โดย M009 View Topic [RC] Last Active Topics jQuery แสดงกระทู้ล่าสุดโดยใช้ jQuery