অবজেক্ট-রিলেশনাল-ম্যাপিং (Object Relational Mapping)

[৭.১] ভূমিকা ও পরিচয় (Opening introduction)

বুটক্যাম্পের এই পর্যায়ে আমরা ORM বা Object Relational Mapping এর সাথে পরিচিত হবো। ORM এর মাধ্যমে আমরা রিলেশনাল ডাটাবেসের সাথে সরাসরি যোগাযোগ স্থাপন করে নানান জটিল কমান্ড সহজ ভাষায় সম্পন্ন করতে পারি। এখানে পার্থক্য কেবল এটাই যে, SQL এর পরিবর্তে কাজটা হাই লেভেল প্রোগ্রামিং ল্যাংগুয়েজ ব্যবহার করেই করা যায়।  

এই চ্যাপ্টারটি কয়েক ভাগে বিভক্ত –

  1. প্রথমেই ORM-এর একটি ওভারভিউ দিয়ে শুরু করে, এর সুবিধা এবং অসুবিধাগুলো নিয়ে আলোচনা করা হবে। 
  2. পরবর্তীতে আমরা প্রবেশ করব Go তে ORM ব্যবহারে। অনেকগুলো প্রয়োগ এবং উদাহরণের দেখা মিলবে সেখানে। 
  3. শেষ করব CRUD ফাংশনগুলোর প্রয়োগসহ একটা ছোট প্রজেক্ট এবং নিজ থেকে শেখার জন্য কিছু সাইট রেফারেন্সের মাধ্যমে। 

 

শুরু করা যাক তাহলে …

[৭.১.১] ORM কি?

প্রথমেই বলেছি, ORM বা Object Relational Mapping হচ্ছে হাই লেভেল ল্যাংগুয়েজের ব্যবহার করে রিলেশনাল  ডাটাবেসের সাথে যোগাযোগ স্থাপন এবং SQL কমান্ড গুলোর জটিলতা কে লুকিয়ে সহজ কিওয়ার্ড ব্যবহার করে একই কাজ সম্পন্ন করা। এখানে ডাটাবেসের উপাদান গুলোর সাথে ডেভেলপার দের সম্পর্ক এমন হয় যেন ডাটাবেসের ডাটার প্রত্যেকটা সারি, রেগুলার প্রোগ্রামের একেকটি অবজেক্টের মতো। ORM কাজটি করে থাকে ডাটাবেসের টেবিল এবং কলামের সাথে প্রোগ্রামের ক্লাস এবং এর চলকগুলোর একটা যোগসূত্র স্থাপন করার মাধ্যমে।  

উদাহরণস্বরূপ, আমরা Go এর Struct এর কথা বলতে পারি। এখানে একটা Struct এর মধ্যে কিছু ফিল্ড থাকে যেগুলোর সাথে ডাটাবেসের কলামগুলোর একটা ম্যাপিং করে দিয়ে থাকে ORM. ফলে খুব সহজের আমাদের Class, Object আর Method এর জ্ঞান দিয়েই আমরা ডাটাবেসের সাথে যোগাযোগ করতে পারি।

[৭.১.২] ORM এর উপকারিতা

  • প্রোডাক্টিভিটি : ডেভেলপার মানেই কাজ যথাসম্ভব কম করে ফলাফল নিশ্চিত করা। Abstraction নামক যাদুতে ORM, SQL এর বড় এবং জটিল কুয়েরি গুলোকে ছোট করে নিয়ে আসে এবং অল্প কোড লিখেই বড় কার্য সাধন করা যায়। 
  • কোডের সাবলীলতা : ORM, Object Oriented Programming এর গঠন ও প্রয়োগ ব্যবহার করায় এতে কোড লেখা যেমন সহজ হয়, তেমনই পড়ে বোঝার উপযোগিতাও বেশি পাওয়া যায়।
  • একই ইন্টারফেস : সাধারণত ORM একাধিক ডাটাবেস সাপোর্ট করে থাকে, যেমন, MySQL, PostGres, Sqlite. প্রায় একই ইন্টারফেস সার্বজনীন হওয়াতে আলাদা আলাদা ধরনের ডাটাবেসে কাজ করা টা অনেক সহজ হয়ে যায়।
  • নিরাপত্তা : আমরা অনেকেই হয়তো জেনে থাকবো SQL injection attack এর ব্যাপারে। ORM ডাটা ইনপুট করার আগে এ ধরণের পরিস্থিতি এড়ানোর ব্যাবস্থা নিজে থেকে করে নেয়। 

বিশেষ নোট : ORM এর সঠিক ব্যবহারের আগে ডাটাবেস সম্পর্কে পরিষ্কার ধারণা থাকা প্রয়োজন। এছাড়াও ORM ব্যবহারের ক্ষেত্রে সতর্কতা প্রয়োজন, কারণ এর Abstraction এর ফলাফলস্বরূপ অনেক সময় টাইম কমপ্লেক্সিটি সাধারণ SQL এর থেকে অনেক বেশি হয়ে যায়।

[৭.১.৩] Go তে ORM.

Go তে যেসকল বহুল পরিচিত আর ব্যবহৃত ORM গুলো আছে, তার মধ্যে কয়েকটি হলো –

  1. GORM : GORM বহুল ব্যবহৃত এবং গিটহাবে সবচেয়ে বেশী স্টার সমৃদ্ধ ORM ফ্রেমওয়ার্ক। এটি একই সাথে সুগঠিত এবং সহজবোধ্য একটি API প্রদান করে থাকে যার অন্যতম সুবিধা গুলো হলো, কটেক্সট সাপোর্ট, ট্রানজ্যাকশন, ইগার লোডিং, স্কিমা অটো মাইগ্রেশন ইত্যাদি। এটির আরেকটি ভালো দিক হচ্ছে যে, GORM অনেক গুলো রিলেশনাল ডাটাবেসের জন্য সাপোর্ট দিয়ে থাকে।
  2. XORM : XORM ও GORM এর মতো অনেক ধরণের রিলেশনাল ডাটাবেস সাপোর্ট করে থাকে।  এছাড়াও এই ORM থেকে ট্রানজ্যাকশন, ক্যাশিং, স্কিমা মাইগ্রেশন এর মতো সুবিধা গুলোও পাওয়া যায়।
  3. QBS : QBS বা Query By Struct, পারফরম্যান্স টার্গেট করে তৈরি একটি ORM ফ্রেমওয়ার্ক। QBS অনেক মিনিমালিস্টিক API প্রদান করে থাকে যা যেকোনো ছোট প্রজেক্টের জন্য ভালো সিদ্ধান্ত, যেখানে পারফর‍ম্যান্স অনেক বড় একটা লক্ষ্য।
  4. SQLBoiler : SQLBoiler একটি ORM জেনারেট করার টুল যা ডাটাবেসের স্কিমা অনুযায়ী ORM তৈরি করে থাকে। যেখানে GORM/Gorp এর মতো ORM, প্রথমে কোড লিখে এরপর তা স্কিমা হিসেবে ব্যবহার করে, সেখানে SQLBoiler প্রথমে ডাটাবেস স্কিমা তৈরি করে পরে তার উপরে কোডের কাজ করে থাকে। এর সুবিধাগুলোর মধ্যে আছে, Automatic struct and table name mapping, Query building helpers ইত্যাদি।

উপরোক্ত ORM গুলো ছাড়াও আরও অনেক বিকল্প Go তে আছে। প্রয়োজন অনুসারে সেগুলো সম্পর্কে আরও জানার থাকলে এই লিংকটি কাজে আসবে। 

আমাদের বুটক্যাম্পের সকল প্রায়োগিক ব্যবহার এবং উদাহরণের জন্য আমরা GORM ব্যবহার করব।

[৭.১.৪] GORM ব্যবহারের কারন

ইতোমধ্যেই ORM এর যেসকল সুবিধা সম্পর্কে আমরা অবগত হয়েছি, এর বাইরেও GORM নিজস্ব কিছু বাড়তি সুবিধা প্রদান করে থাকে, যাতে করে অনভিজ্ঞ পর্যায়ে ORM এর ব্যবহারটা আরও সহজ হয়ে যায়। সুবিধাগুলো –  

 

  • ডাটাবেসের সাথে যোগাযোগ করার জন্য একটি পরিষ্কার এবং সহজবোধ্য API প্রদান করে থাকে, যা Go বা ডাটাবেসের সাথে নতুন পরিচিত ডেভেলপারদের জন্যও সহজে ব্যবহারযোগ্য করে তোলে। অন্যান্য ORM এর তুলনায় এর ইউজার সংখ্যা বেশি হওয়াতে, শুরুতে অনেক সাপোর্ট পাওয়া যায় যেকোনো সমস্যায়। সুতরাং এই বুটক্যাম্পটি ফলো করতে যেয়েও যদি কোন সমস্যার দেখা মিলে তখন সহজেই তার সমাধান অনলাইনে পাওয়া যাবে। 

 

  • GORM স্বয়ংক্রিয়ভাবে Go স্ট্রাকটগুলোর উপর ভিত্তি করে ডাটাবেস স্কিমা তৈরি বা আপডেট করতে পারে, কোডের সাথে ডাটাবেস স্কিমাকে সামজ্জস্যে রাখাটা সহজ হয়। 

 

  • একাধিক ডাটাবেস ব্যাকএন্ডের জন্য, যেমন, MySQL, PostgreSQL, SQLite এবং SQL server সহ একটি বিস্তৃত পর্যায়ে সাপোর্ট দিয়ে থাকে, যা প্রজেক্টের আগানোর সাথে সাথে বিভিন্ন ডাটাবেসের মধ্যে পরিবর্তন করা সহজ করে তোলে এবং সাথে সাথে যে যেই ডাটাবেসে সুবিধা বোধ করে সেটা ব্যবহার করেই আমাদের বুটক্যাম্পটি ফলো করতে পারবে।