আপনার অ্যাপে ডাটাবেস কীভাবে যুক্ত করবেন (ডেটা হারানো ছাড়াই)
আপনার অ্যাপে ডাটাবেস যুক্ত করতে একটি ম্যানেজড রিলেশনাল ডাটাবেস বেছে নিন (সাধারণত Postgres), এর কানেকশন স্ট্রিং সার্ভার-সাইড সিক্রেটে রাখুন, আপনার স্টোর করা প্রতি ধরনের জিনিসের জন্য একটি করে টেবিল বানান, এবং আপনার ব্যাকএন্ড — ব্রাউজার নয় — ডাটাবেসে পড়া-লেখা করুক। আপনি যদি কোনো AI অ্যাপ বিল্ডার ব্যবহার করেন, তাহলে সাধারণত শুধু বলে দিতে পারেন "এটি ডাটাবেসে সেভ করো", আর এজেন্ট টেবিল ও কোড বানিয়ে দেবে; আপনার কাজ হলো ডেটাটি স্পষ্টভাবে বর্ণনা করা এবং সত্যিই সেটি সেভ হচ্ছে কিনা যাচাই করা।
এই গাইডে আছে কখন ডাটাবেস দরকার, প্রধান অপশনগুলো, কীভাবে আপনার ডেটা বর্ণনা করবেন এবং যেসব ভুলে ডেটা হারায় বা ফাঁস হয়, সেগুলো।
আপনার অ্যাপের কখন ডাটাবেস দরকার
আপনার ডাটাবেস দরকার যখন আপনার অ্যাপকে পেজ বন্ধ হওয়ার পরেও কিছু মনে রাখতে হয়, অথবা মানুষের মধ্যে ডেটা শেয়ার করতে হয়। সাধারণ লক্ষণগুলো:
- ভিজিটররা কিছু জমা দেয়: একটি ফর্ম, সাইন-আপ, বুকিং বা অর্ডার
- ব্যবহারকারীদের অ্যাকাউন্ট আছে, নিজের সংরক্ষিত কন্টেন্ট আছে
- একজন অ্যাডমিনকে অন্যদের তৈরি করা জিনিস দেখতে বা সম্পাদনা করতে হয়
- সময়ের সাথে রিপোর্ট বা গণনা দরকার
যে স্ট্যাটিক সাইটে সবাই একই কন্টেন্ট দেখে, যেমন পোর্টফোলিও বা সাধারণ ল্যান্ডিং পেজ, তার ডাটাবেস লাগে না। ডাটাবেস আসলে কী, তা নিশ্চিত না হলে আগে ডাটাবেস কী পড়ে নিন।
আপনার অপশনগুলো
| অপশন | এটি কী | কীসের জন্য ভালো | ট্রেড-অফ |
|---|---|---|---|
| আপনার অ্যাপ বিল্ডারের বিল্ট-ইন ডাটাবেস | আপনার প্রজেক্টের জন্য তৈরি ও সংযুক্ত ডাটাবেস | AI বিল্ডার দিয়ে বানানো বেশিরভাগ অ্যাপ | ওই প্ল্যাটফর্মের হোস্টিংয়ের সাথে বাঁধা; এক্সপোর্ট ও ব্যাকআপ প্ল্যাটফর্মের উপর নির্ভর করে |
| ম্যানেজড Postgres বা MySQL | আলাদাভাবে সাইন আপ করা হোস্টেড রিলেশনাল ডাটাবেস | নিজে হোস্ট করা অ্যাপ, বা একাধিক সার্ভিস যা শেয়ার করে | কী, কানেকশন লিমিট ও প্ল্যান আপনাকেই দেখতে হয় |
| Backend-as-a-service | ডাটাবেস, লগইন, স্টোরেজ ও API একই প্রোডাক্টে | ফ্রন্টএন্ড-ভারী অ্যাপ যাদের তৈরি লগইন দরকার | শেখার মতো আরও নির্দিষ্ট ধারণা আছে |
| ডকুমেন্ট (NoSQL) ডাটাবেস | নমনীয় JSON-সদৃশ ডকুমেন্ট সংরক্ষণ করে | খুব অনিয়মিত ডেটা | সম্পর্ক ও রিপোর্টিং কঠিন |
| স্প্রেডশিটকে ডাটাবেস হিসেবে ব্যবহার | API-র মাধ্যমে Google Sheets বা অনুরূপ কিছু | ছোট অভ্যন্তরীণ টুল, প্রোটোটাইপ | ধীর, সত্যিকারের কোনো নিয়ম নেই, একসাথে বদলালে ভেঙে যায় |
বেশিরভাগ ছোট ও মাঝারি ওয়েব অ্যাপের জন্য Postgres-এর মতো রিলেশনাল ডাটাবেসই সঠিক ডিফল্ট। এটি সম্পর্ক ভালো বোঝে (একজন গ্রাহকের অনেক অর্ডার থাকে), ডেটার ধারাবাহিকতা ঠিক রাখে এবং পরে SQL দিয়ে প্রশ্নের উত্তর দিতে দেয়। সহজ ভাষায় ওভারভিউয়ের জন্য Postgres কী দেখুন।
বানানোর আগে ডেটা বর্ণনা করুন
সবচেয়ে কার্যকর কাজ হলো আপনার অ্যাপ যে জিনিসগুলো সংরক্ষণ করে এবং সেগুলো কীভাবে যুক্ত তা লিখে ফেলা। ডাটাবেসের পরিভাষা লাগে না। একটি বুকিং অ্যাপের জন্য:
- গ্রাহক: নাম, ইমেইল, ফোন
- সার্ভিস: নাম, সময়কাল, দাম
- বুকিং: কোন গ্রাহক, কোন সার্ভিস, শুরুর সময়, অবস্থা (অপেক্ষমাণ, নিশ্চিত, বাতিল)
এটি তিনটি টেবিল। "কোন গ্রাহক" আর "কোন সার্ভিস" হয়ে যায় তাদের মধ্যে সংযোগ (ফরেন কী)। শুরুতেই এটি ঠিক করা যেকোনো প্রযুক্তি পছন্দের চেয়ে অনেক বেশি গুরুত্বপূর্ণ, কারণ আসল রো থাকা ডেটার আকৃতি বদলানো পেজের লেআউট বদলানোর চেয়ে কঠিন।
কিছু সাধারণ নিয়ম:
- প্রতি ধরনের জিনিসের জন্য একটি টেবিল। অর্ডারগুলো গ্রাহকের একটি টেক্সট কলামে ঢুকিয়ে দেবেন না।
- প্রতিটি রো-কে একটি ID ও একটি তৈরির সময় দিন। পরে দুটোই দরকার হবে।
- সঠিক টাইপ ব্যবহার করুন। তারিখ তারিখ হিসেবে, টাকা পয়সা সেন্ট বা দশমিক টাইপে, টেক্সট হিসেবে নয়।
- আবশ্যক ফিল্ডগুলো চিহ্নিত করুন। শুধু ফর্মে নয়, ডাটাবেসও খারাপ ডেটা প্রত্যাখ্যান করুক।
উদাহরণ প্রম্পট
একবারে পুরো স্কিমা না দিয়ে একটি একটি ফিচার ধরে শুরু করুন:
এই অ্যাপে একটি ডাটাবেস যুক্ত করো। একটি bookings টেবিল বানাও যাতে থাকবে গ্রাহকের নাম, ইমেইল, সার্ভিস, শুরুর সময় এবং অবস্থা (pending, confirmed, cancelled; ডিফল্ট pending)। বুকিং ফর্মের জমা দেওয়া তথ্য সেখানে সেভ করো, একটি সফলতার বার্তা দেখাও, এবং একটি অ্যাডমিন পেজ যোগ করো যেখানে নতুন বুকিং আগে দেখাবে।
তারপর বাড়াও:
একটি services টেবিল যোগ করো (নাম, সময়কাল মিনিটে, দাম সেন্টে)। bookings-এর ফ্রি-টেক্সট সার্ভিস ফিল্ডটিকে services-এর সাথে সংযোগে বদলাও, এবং বিদ্যমান বুকিংগুলো মুছে না ফেলে স্থানান্তর করো।
এবং আরও শক্ত করো:
নিশ্চিত করো যে সব ডাটাবেস পড়া ও লেখা সার্ভারে হয়। ব্রাউজার যেন কখনো ডাটাবেসের কানেকশন স্ট্রিং না পায়। ডাটাবেসে ঢোকানোর আগে সার্ভারে ইমেইল ও শুরুর সময় যাচাই করো।
ধাপে ধাপে
- আপনার ডেটার তালিকা করুন উপরের মতো: জিনিস, ফিল্ড, এবং তাদের মধ্যে সংযোগ।
- ডাটাবেস তৈরি করুন। AI বিল্ডারে চ্যাটে চাইলেই হবে। অন্যত্র একটি ম্যানেজড Postgres ইনস্ট্যান্স বানিয়ে তার কানেকশন স্ট্রিং কপি করুন।
- কানেকশন স্ট্রিং একটি সিক্রেট হিসেবে রাখুন (সার্ভারের একটি এনভায়রনমেন্ট ভেরিয়েবল), কখনো কোডে নয়। দেখুন এনভায়রনমেন্ট ভেরিয়েবল ও সিক্রেট।
- টেবিলগুলো তৈরি করুন। মাইগ্রেশন ব্যবহার করুন — স্কিমা বদলানোর ভার্সনযুক্ত স্ক্রিপ্ট — যাতে পরিবর্তনগুলো পুনরাবৃত্তিযোগ্য ও ফেরানো যায়।
- সার্ভার রুট বানান যা রো তৈরি, পড়া, আপডেট ও মুছে ফেলে (CRUD)। ব্রাউজার এই রুটগুলো ডাকে; সরাসরি ডাটাবেসের সাথে কথা বলে না।
- UI-কে এই রুটগুলোর সাথে যুক্ত করুন: যেসব ফর্ম সেভ করে, যেসব লিস্ট লোড হয়, এবং কিছু না থাকলে খালি-অবস্থার বার্তা।
- স্থায়িত্ব পরীক্ষা করুন। কিছু জমা দিন, পেজ রিলোড করুন, অন্য ব্রাউজারে খুলুন। ডেটা না থাকলে সেটি ডাটাবেসে সেভ হয়নি।
- অ্যাক্সেস যাচাই করুন। দ্বিতীয় একজন ব্যবহারকারী দিয়ে লগইন করে দেখুন প্রথম ব্যবহারকারীর ডেটা দেখা বা বদলানো যায় কিনা।
- প্রকাশ করুন, তারপর লাইভ URL-এ আবার পরীক্ষা করুন, কারণ প্রকাশিত অ্যাপ আপনার প্রিভিউয়ের চেয়ে ভিন্ন কানেকশন ব্যবহার করতে পারে।
সাধারণ ভুল
- ব্রাউজারে সেভ করে ভাবা যে ডাটাবেসে সেভ হয়েছে। localStorage ততক্ষণ ঠিক কাজ করে মনে হয়, যতক্ষণ না কেউ অন্য ডিভাইসে অ্যাপ খোলে। সবসময় দ্বিতীয় ব্রাউজারে পরীক্ষা করুন।
- ফ্রন্টএন্ড কোডে কানেকশন স্ট্রিং রাখা। ফ্রন্টএন্ড কোড যে কেউ পড়তে পারে। এতে তারা আপনার পুরো ডাটাবেস পেয়ে যায়।
- অ্যাক্সেস চেক না থাকা। "আমার অর্ডার দেখাও" সার্ভারে লগইন করা ব্যবহারকারী দিয়ে ফিল্টার করতে হবে, UI-তে নয়। AI-বানানো অ্যাপে এটিই সবচেয়ে সাধারণ নিরাপত্তা ফাঁক; আমাদের AI-বানানো অ্যাপের নিরাপত্তা চেকলিস্ট এটি কভার করে।
- ধ্বংসাত্মক স্কিমা বদল। "টেবিলের নাম বদলাও" বা "কাঠামো বদলাও" বললে টেবিল মুছে নতুন করে বানানো হতে পারে। আসল ডেটা থাকলে বলুন "বিদ্যমান রো স্থানান্তর করো, কিছু মুছো না"।
- ডাটাবেসে ফাইল রাখা। ছবি ও PDF ফাইল স্টোরেজে যাবে, টেবিলে শুধু তাদের URL বা কী থাকবে। দেখুন ফাইল আপলোড কীভাবে যুক্ত করবেন।
- কোনো ব্যাকআপ না থাকা। গ্রাহক আসার আগেই জেনে নিন আপনার প্ল্যাটফর্ম কীভাবে ব্যাকআপ নেয় এবং কীভাবে ফেরাতে হয়।
চেকলিস্ট
- প্রতি ধরনের জিনিসের নিজস্ব টেবিল আছে, ID ও তৈরির সময়সহ
- আবশ্যক ফিল্ড ও টাইপ ডাটাবেস দিয়ে বাধ্যতামূলক করা
- কানেকশন স্ট্রিং শুধু সার্ভার-সাইড সিক্রেটে আছে
- সব পড়া ও লেখা সার্ভার রুটের মাধ্যমে হয়
- প্রতিটি ব্যবহারকারী শুধু নিজের রো পড়তে ও বদলাতে পারে
- রিলোডের পরেও ডেটা থাকে এবং অন্য ব্রাউজারে দেখা যায়
- স্কিমা বদল মাইগ্রেশন দিয়ে হয় এবং বিদ্যমান রো রাখে
- ব্যাকআপ ও রিস্টোর কীভাবে কাজ করে জানা আছে
- প্রকাশের পরে লাইভ অ্যাপ পরীক্ষা করা হয়েছে
Mythex-এ ডাটাবেস যুক্ত করা
Mythex-এ প্রতিটি প্রজেক্ট নিজস্ব ডেডিকেটেড Postgres ডাটাবেস পেতে পারে, Free ও Pro দুই প্ল্যানেই। সাধারণত আলাদা "attach" বাটনে ক্লিক করতে হয় না: চ্যাটে বলুন ("ওয়েটলিস্টের ইমেইলগুলো ডাটাবেসে সেভ করো") অথবা /database টাইপ করুন, এবং কানেকশনের তথ্য ওয়ার্কস্পেস ও আপনার প্রকাশিত অ্যাপে ইনজেক্ট হয়। প্রজেক্ট সেটিংসে দেখা যায় ডাটাবেস সক্রিয় কিনা।
ডাটাবেস ৫ মিনিট নিষ্ক্রিয় থাকলে ঘুমিয়ে যায় এবং পরের অনুরোধে জেগে ওঠে। প্রকাশিত ব্যবহারের খরচ শুধু জেগে থাকা সময়ের জন্য নেওয়া হয়, এবং বানানোর জন্য যে ক্রেডিট ব্যালেন্স ব্যবহার করেন, সেখান থেকেই কাটা হয়। আপনি প্রকাশ করার পরে ডাটাবেস যোগ করলে লাইভ অ্যাপ সেটি পাওয়ার জন্য আবার প্রকাশ করুন।
বিস্তারিত দেখুন Database এবং ডকসের CRUD অ্যাপ বানানো রেসিপি। প্রতি-ব্যবহারকারী ডেটার লগইন দিকটির জন্য দেখুন অ্যাপে লগইন কীভাবে যুক্ত করবেন।
প্রশ্নোত্তর
আমার অ্যাপের কি ডাটাবেস দরকার?
যখনই আপনার অ্যাপকে ভিজিটের মাঝখানে কিছু মনে রাখতে হয় বা ব্যবহারকারীদের মধ্যে ডেটা শেয়ার করতে হয়, তখনই দরকার: সাইন-আপ, অর্ডার, বুকিং, পোস্ট বা সেটিংস। যে স্ট্যাটিক ওয়েবসাইট সবাইকে একই কন্টেন্ট দেখায়, তার ডাটাবেস লাগে না।
ছোট ওয়েব অ্যাপের জন্য কোন ডাটাবেস ব্যবহার করব?
বেশিরভাগ ছোট ওয়েব অ্যাপের জন্য Postgres-এর মতো রিলেশনাল ডাটাবেসই নিরাপদ পছন্দ। এটি ব্যবহারকারী, অর্ডার, সম্পর্ক এবং রিপোর্টিং ভালোভাবে সামলায়, ব্যাপকভাবে সমর্থিত এবং ছোট পরিসরে এটি সহজে ছাড়িয়ে যাওয়ার সম্ভাবনা কম।
ডাটাবেসের বদলে কি ব্রাউজারে ডেটা রাখা যায়?
localStorage-এর মতো ব্রাউজার স্টোরেজ শুধু একটি ডিভাইসের একটি ব্রাউজারে থাকে, আর ব্যবহারকারী যেকোনো সময় তা মুছে ফেলতে পারেন। থিম পছন্দের মতো সেটিংসের জন্য এটি ঠিক আছে, কিন্তু যা আপনাকে বা অন্য ব্যবহারকারীদের পরে দেখতে হবে, তার জন্য নয়।
Mythex-এ কি ডাটাবেস আছে?
হ্যাঁ। একটি Mythex প্রজেক্ট Free ও Pro প্ল্যানে নিজস্ব ডেডিকেটেড Postgres ডাটাবেস পেতে পারে। চ্যাটে চাইলে বা /database কমান্ড ব্যবহার করলে এটি যুক্ত হয়, এবং সংযোগের তথ্য স্বয়ংক্রিয়ভাবে ইনজেক্ট হয়। ব্যবহারের খরচ একই ক্রেডিট ব্যালেন্স থেকে কাটা হয়, যা দিয়ে আপনি অ্যাপ বানান।