TinyDB মূলত একটি NoSQL ডাটাবেস, যেখানে ডেটাবেসের ডেটা JSON ফাইল আকারে সংরক্ষণ করা হয়। এটি সরাসরি রিলেশনাল ডাটাবেসের মতো Foreign Key বা Direct Relation সমর্থন করে না। তবে, কিছু নির্দিষ্ট কৌশল ব্যবহার করে TinyDB তে টেবিলগুলোর মধ্যে সম্পর্ক স্থাপন করা যায়।
নিচে টেবিলগুলোর মধ্যে ডেটা সম্পর্ক তৈরি করার জন্য একটি কার্যকর পদ্ধতি এবং তার উদাহরণ আলোচনা করা হলো।
TinyDB তে Relation তৈরির পদ্ধতি
১. Foreign Key অনুকরণ করা
একটি টেবিলের ডেটার মধ্যে অন্য একটি টেবিলের Unique Identifier (ID) সংরক্ষণ করে সম্পর্ক তৈরি করা যায়।
২. টেবিল আইডি ব্যবহার
প্রত্যেক টেবিলের জন্য একটি ইউনিক ID ফিল্ড ব্যবহার করা হয়, যা অন্য টেবিলের মধ্যে Reference হিসেবে ব্যবহৃত হয়।
৩. ডেটা ফিল্টারিং এবং Query
TinyDB এর Query API ব্যবহার করে সম্পর্কিত ডেটা ফিল্টার করা এবং প্রয়োজন অনুযায়ী ফলাফল পাওয়া যায়।
উদাহরণ: TinyDB তে টেবিল সম্পর্ক তৈরি
ধাপ ১: টেবিল তৈরি
from tinydb import TinyDB
# ডাটাবেস তৈরি
db = TinyDB('db.json')
# টেবিল তৈরি
users_table = db.table('users')
orders_table = db.table('orders')
ধাপ ২: টেবিলে ডেটা যোগ
Users Table
# Users টেবিলে ডেটা যোগ
users_table.insert({'id': 1, 'name': 'Rahim', 'email': 'rahim@example.com'})
users_table.insert({'id': 2, 'name': 'Karim', 'email': 'karim@example.com'})
Orders Table
# Orders টেবিলে ডেটা যোগ (User ID ব্যবহার করে সম্পর্ক তৈরি)
orders_table.insert({'order_id': 101, 'user_id': 1, 'product': 'Laptop', 'amount': 55000})
orders_table.insert({'order_id': 102, 'user_id': 2, 'product': 'Phone', 'amount': 25000})
orders_table.insert({'order_id': 103, 'user_id': 1, 'product': 'Tablet', 'amount': 30000})
ধাপ ৩: সম্পর্কিত ডেটা অনুসন্ধান
User এর Order খুঁজে বের করা
from tinydb import Query
# Query তৈরি
Order = Query()
# নির্দিষ্ট User (Rahim) এর Order খুঁজে বের করা
user_orders = orders_table.search(Order.user_id == 1)
print(user_orders)
আউটপুট:
[
{'order_id': 101, 'user_id': 1, 'product': 'Laptop', 'amount': 55000},
{'order_id': 103, 'user_id': 1, 'product': 'Tablet', 'amount': 30000}
]
User Details সহ Orders দেখানো
# User এবং তার Orders একসঙ্গে দেখানো
for order in user_orders:
user = users_table.get(Query().id == order['user_id'])
print(f"User: {user['name']}, Product: {order['product']}, Amount: {order['amount']}")
আউটপুট:
User: Rahim, Product: Laptop, Amount: 55000
User: Rahim, Product: Tablet, Amount: 30000
সম্পর্ক ব্যবস্থাপনার সেরা চর্চা
- Unique ID ব্যবহার করুন: প্রতিটি টেবিলের জন্য একটি Unique Identifier রাখতে হবে।
- Query API ব্যবহার করুন: TinyDB এর ফিল্টারিং ক্ষমতা ব্যবহার করে সম্পর্কিত ডেটা অনুসন্ধান করুন।
- ডেটা ভ্যালিডেশন করুন: Insert করার সময় নিশ্চিত করুন যে সম্পর্কিত টেবিলের ID বিদ্যমান আছে।
- Indexing ব্যবহার করুন: দ্রুত অনুসন্ধানের জন্য প্রয়োজনীয় ক্ষেত্রে Index তৈরি করুন।
সীমাবদ্ধতা
- TinyDB সরাসরি Foreign Key সমর্থন করে না।
- জটিল Relationship ব্যবস্থাপনার জন্য TinyDB সীমাবদ্ধ।
- বড় আকারের ডেটাবেস বা জটিল Query গুলোতে কার্যকারিতা কম।
সারাংশ
TinyDB তে সরাসরি রিলেশনাল ডেটাবেসের মতো সম্পর্ক তৈরি সম্ভব না হলেও Unique ID এবং Query API ব্যবহার করে কার্যকর সম্পর্ক স্থাপন করা যায়। ছোট আকারের ডেটাবেস এবং সহজ সম্পর্ক ব্যবস্থাপনার জন্য এটি একটি কার্যকর সমাধান।
Read more