SQLite একটি লাইটওয়েট ডাটাবেস সিস্টেম, যা কিছু নির্দিষ্ট ডেটা টাইপ সমর্থন করে। SQLite একটি দ্ব্যর্থতামূলক টাইপ সিস্টেম ব্যবহার করে, অর্থাৎ এটি মূলত কলামগুলোর জন্য ডেটা টাইপ নির্ধারণ করে না। তবে, SQLite একটি "প্রকাশ্য" ডেটা টাইপ সিস্টেম অনুসরণ করে, যার মাধ্যমে আপনি বিভিন্ন ধরনের ডেটা টাইপ ব্যবহার করতে পারেন।
SQLite-এ ডেটা টাইপ ব্যবহৃত হয় মূলত স্টোরেজ ক্লাস হিসেবে, যেগুলি মূলত INTEGER, TEXT, REAL, BLOB, এবং NULL। ডেটা টাইপের নামগুলি বাস্তবে ডাটাবেসের মধ্যে ব্যবহৃত মানগুলোর জন্য মাত্র একটি নির্দেশিকা হিসেবে কাজ করে।
SQLite এর প্রধান ডেটা টাইপ
INTEGER:
INTEGERটাইপের মধ্যে পূর্ণসংখ্যা (ইনটিজার) মান সংরক্ষণ করা হয়।- এটি 8-বাইট সাইজ পর্যন্ত পূর্ণসংখ্যা ধারণ করতে পারে।
- যদি আপনি একটি সিগনেচার
INTEGER PRIMARY KEYব্যবহার করেন, তবে এটি একটি অটো-ইনক্রিমেন্ট কলাম হিসেবে কাজ করবে।
উদাহরণ:
id INTEGER PRIMARY KEY;TEXT:
TEXTটাইপের মধ্যে স্ট্রিং (পাঠ্য) মান সংরক্ষণ করা হয়।- এটি যেকোনো আকারের টেক্সট ধারণ করতে পারে, এবং UTF-8, UTF-16 এবং UTF-32 এ স্টোর করা হয়।
উদাহরণ:
name TEXT;REAL:
REALটাইপের মধ্যে দশমিক সংখ্যা (floating point numbers) সংরক্ষণ করা হয়।- এটি IEEE 754 স্ট্যান্ডার্ড অনুযায়ী 8-বাইট ফ্লোটিং পয়েন্ট মান সংরক্ষণ করে।
উদাহরণ:
price REAL;BLOB:
BLOB(Binary Large Object) টাইপের মধ্যে বাইনারি ডেটা (যেমন: ইমেজ, অডিও, ভিডিও, ফাইল) সংরক্ষণ করা হয়।- এটি কোনো ডেটা রূপান্তর না করেই সরাসরি বাইনারি ডেটা ধারণ করে।
উদাহরণ:
photo BLOB;NULL:
NULLটাইপটি কোনো মান নির্ধারণ না হওয়া কলাম বা রেকর্ডের জন্য ব্যবহৃত হয়।- এটি অবশ্যই ডাটাবেসে কোনও মান না থাকা অবস্থা নির্দেশ করে।
উদাহরণ:
description NULL;
কাস্টম ডেটা টাইপ (Custom Data Types)
SQLite-এ কাস্টম ডেটা টাইপের ধারণা রয়েছে, তবে এগুলি কিছু নির্দিষ্ট ডেটা টাইপের সাথে সম্পর্কিত। আপনি কোনো ডেটা টাইপ কাস্টমাইজ করতে পারেন যা আপনার অ্যাপ্লিকেশনের জন্য উপযুক্ত। SQLite-এ কাস্টম ডেটা টাইপ তৈরি করার জন্য সাধারণত টাইপ কনভার্সন ব্যবহার করা হয়।
কাস্টম টাইপের উদাহরণ:
ইউনিয়ন টাইপ:
- SQLite-এ
TEXTবাREALফিল্ডের জন্য কাস্টম ডেটা টাইপ তৈরি করা যেতে পারে। উদাহরণস্বরূপ, আপনি এমন একটি টেবিল তৈরি করতে পারেন যেখানে দুটি বিভিন্ন ডেটা টাইপ (যেমন: INTEGER এবং TEXT) একসাথে ব্যবহার করা হবে।
উদাহরণ:
CREATE TABLE my_table ( id INTEGER PRIMARY KEY, value TEXT, custom_type TEXT CHECK(value IN ('small', 'medium', 'large')) );এখানে,
custom_typeকলামটি কাস্টম ডেটা টাইপ তৈরি করেছে যা শুধুমাত্র নির্দিষ্ট মান (‘small’, ‘medium’, ‘large’) গ্রহণ করবে।- SQLite-এ
আন্তরিক কাস্টম টাইপের তৈরি:
- কিছু ক্ষেত্রে, আপনি আপনার অ্যাপ্লিকেশনে একাধিক ডেটা টাইপের সমন্বয় করতে চাইলে
CHECKকন্ডিশন ব্যবহার করতে পারেন।
উদাহরণ:
CREATE TABLE products ( product_id INTEGER PRIMARY KEY, product_name TEXT, product_price REAL, product_category TEXT CHECK(product_category IN ('Electronics', 'Clothing', 'Furniture')) );এখানে,
product_categoryকলামে কাস্টম ডেটা টাইপের মাধ্যমে কিছু নির্দিষ্ট মান দেওয়া হয়েছে, যার মাধ্যমে ক্যাটাগরি নিয়ন্ত্রণ করা হয়েছে।- কিছু ক্ষেত্রে, আপনি আপনার অ্যাপ্লিকেশনে একাধিক ডেটা টাইপের সমন্বয় করতে চাইলে
সারাংশ
SQLite ডেটা টাইপ এবং কাস্টম ডেটা টাইপ ব্যবহারের মাধ্যমে আপনি বিভিন্ন ধরনের ডেটা সংরক্ষণ করতে পারেন। SQLite মূলত ৫টি স্টোরেজ ক্লাস সমর্থন করে: INTEGER, TEXT, REAL, BLOB, এবং NULL। তবে, আপনি কাস্টম ডেটা টাইপ তৈরি করতে পারেন, বিশেষত যখন আপনাকে ডেটার ধরন কাস্টমাইজ করতে হয় বা কিছু নির্দিষ্ট মানের মধ্যে সীমাবদ্ধ রাখতে হয়। SQLite এর কাস্টম ডেটা টাইপ ব্যবহার করে আরও বেশি শক্তিশালী এবং নমনীয় ডাটাবেস তৈরি করা সম্ভব।
SQLite একটি সহজ এবং লাইটওয়েট ডাটাবেস সিস্টেম যা বিভিন্ন ধরনের ডেটা টাইপ সাপোর্ট করে। INTEGER, TEXT, REAL, এবং BLOB SQLite এর প্রাথমিক ডেটা টাইপসমূহ। এগুলি ডাটাবেস টেবিলের কলামের জন্য ডেটা টাইপ হিসেবে ব্যবহৃত হয়।
এখানে প্রতিটি ডেটা টাইপের ব্যবহার এবং তাদের বৈশিষ্ট্য আলোচনা করা হলো:
১. INTEGER
INTEGER ডেটা টাইপ মূলত পূর্ণসংখ্যা (whole number) সংরক্ষণের জন্য ব্যবহৃত হয়। এটি কোনও সঠিক সংখ্যা যেমন ১, ১০০, -৩ ইত্যাদি সংরক্ষণ করতে সহায়তা করে।
- ব্যবহার: সাধারণত প্রাইমারি কী বা কাউন্টিং ক্ষেত্রগুলোতে ব্যবহৃত হয়।
উদাহরণ:
CREATE TABLE users ( id INTEGER PRIMARY KEY, age INTEGER );- সীমাবদ্ধতা: INTEGER টাইপ কোনো সীমা ছাড়াই বড় বা ছোট পূর্ণসংখ্যা ধারণ করতে পারে (এটি ৮-বাইট সাইনড পূর্ণসংখ্যা ব্যবহার করে)।
২. TEXT
TEXT ডেটা টাইপে চরিত্র (strings) সংরক্ষণ করা হয়। এটি সাধারণ টেক্সট ডেটা যেমন নাম, ঠিকানা, ইমেইল ঠিকানা ইত্যাদি সংরক্ষণ করতে ব্যবহৃত হয়।
- ব্যবহার: নাম, ইমেইল, মন্তব্য বা যে কোনও প্রকার টেক্সট তথ্য সংরক্ষণের জন্য ব্যবহৃত হয়।
উদাহরণ:
CREATE TABLE users ( id INTEGER PRIMARY KEY, name TEXT, email TEXT );- সীমাবদ্ধতা: TEXT টাইপ বড় বা ছোট যে কোনো স্ট্রিং (যেমন, নাম, ঠিকানা, ইমেইল) ধারণ করতে পারে এবং এটি সাড়ে ২ বিলিয়ন অক্ষরের স্ট্রিং ধারণ করতে সক্ষম।
৩. REAL
REAL ডেটা টাইপটি দশমিক সংখ্যা (floating point number) সংরক্ষণ করার জন্য ব্যবহৃত হয়। এটি সঠিক মানের ভগ্নাংশ সংখ্যা যেমন ৩.১৪, -৫.৬৭, ১২.৮৯ ইত্যাদি সংরক্ষণ করতে ব্যবহৃত হয়।
- ব্যবহার: গাণিতিক হিসাব, পরিসংখ্যান বা অর্থনৈতিক ডেটা যেখানে দশমিক সংখ্যা প্রয়োজন হয়, সে ক্ষেত্রে ব্যবহৃত হয়।
উদাহরণ:
CREATE TABLE products ( id INTEGER PRIMARY KEY, price REAL );- সীমাবদ্ধতা: REAL টাইপের ডেটা IEEE 754 double-precision floating-point standard অনুসরণ করে এবং এটি দশমিক সংখ্যা হিসেবে দশমিক স্থানে সঠিক মান সংরক্ষণ করে।
৪. BLOB
BLOB (Binary Large Object) ডেটা টাইপটি বাইনারি ডেটা সংরক্ষণ করতে ব্যবহৃত হয়, যেমন ইমেজ, অডিও, ভিডিও, ডকুমেন্ট, বা যেকোনো ফাইল যা বাইনারি ফরম্যাটে সংরক্ষণ করতে হয়।
- ব্যবহার: ইমেজ, অডিও, ভিডিও ফাইল বা অন্য কোনো বাইনারি ডেটা সংরক্ষণ করার জন্য ব্যবহৃত হয়।
উদাহরণ:
CREATE TABLE media_files ( id INTEGER PRIMARY KEY, file_name TEXT, file_data BLOB );- সীমাবদ্ধতা: BLOB টাইপ খুব বড় পরিমাণে বাইনারি ডেটা ধারণ করতে পারে এবং এটি ডেটা ফাইলের প্রকৃত বাইনারি আকারে থাকে।
সারাংশ
SQLite-এ INTEGER, TEXT, REAL, এবং BLOB হলো প্রধান ডেটা টাইপ যা বিভিন্ন ধরনের ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়:
- INTEGER: পূর্ণসংখ্যা সংরক্ষণ করে।
- TEXT: স্ট্রিং (চরিত্র) সংরক্ষণ করে।
- REAL: দশমিক সংখ্যার (floating point) জন্য ব্যবহৃত হয়।
- BLOB: বাইনারি ডেটা যেমন ইমেজ বা অডিও ফাইল সংরক্ষণ করতে ব্যবহৃত হয়।
এই ডেটা টাইপগুলোর ব্যবহার আপনার ডাটাবেসের কাঠামো এবং সংরক্ষিত ডেটার প্রকারের উপর ভিত্তি করে নির্ধারণ করা হয়।
NULL একটি বিশেষ ডেটা টাইপ যা SQL ডাটাবেসে ব্যবহৃত হয়, এবং এটি কোন মান উপস্থিত না বা অজানা থাকলে ব্যবহার করা হয়। এটি সাধারণত কোন রেকর্ডে নির্দিষ্ট কলামের মান অনুপস্থিত বা অপরিচিত থাকা অবস্থায় ব্যবহৃত হয়। NULL একটি বিশেষ ধরনের মান, যা শূন্য (zero), ফাঁকা স্ট্রিং, বা অন্য কোন সাধারণ মানের সমতুল্য নয়।
SQLite সহ অন্যান্য ডাটাবেস সিস্টেমে NULL মানের ব্যবহারের অনেক গুরুত্বপূর্ণ দিক রয়েছে যা ডাটা পরিচালনা এবং পরবর্তীতে কুয়েরি করার সময় ভূমিকা রাখে।
NULL এর বৈশিষ্ট্য
- অজানা মান:
- NULL মানের অর্থ হলো অজানা, অর্থাৎ এটি কোনো নির্দিষ্ট মানের প্রতিনিধিত্ব করে না। উদাহরণস্বরূপ, যদি কোন ব্যক্তির জন্ম তারিখ জানা না থাকে, তবে তার জন্ম তারিখের ক্ষেত্রটি NULL হতে পারে।
- NULL এবং শূন্য (Zero) এর পার্থক্য:
- NULL একটি বিশেষ মান, যা শূন্য (0) বা ফাঁকা স্ট্রিং ("") এর থেকে ভিন্ন। শূন্য এবং ফাঁকা স্ট্রিং একটি নির্দিষ্ট মান, কিন্তু NULL মানের কোনো মান নেই।
- NULL এর সাথে তুলনা করা:
- SQLite এবং অন্যান্য SQL সিস্টেমে NULL এর সাথে সরাসরি তুলনা করা যায় না। অর্থাৎ,
NULL = NULLকখনোই সঠিক হবে না। এর পরিবর্তে IS NULL বা IS NOT NULL ব্যবহার করতে হয়।
- SQLite এবং অন্যান্য SQL সিস্টেমে NULL এর সাথে সরাসরি তুলনা করা যায় না। অর্থাৎ,
NULL ব্যবহার
টেবিল তৈরি করা: SQLite-এ যখন আপনি একটি টেবিল তৈরি করেন, তখন আপনি কলামের জন্য
NULLবাNOT NULLকনস্ট্রেইন্ট দিতে পারেন। উদাহরণস্বরূপ:CREATE TABLE employees ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, salary INTEGER, department TEXT );এখানে
salaryএবংdepartmentকলামগুলোর মান NULL হতে পারে, কিন্তুnameকলামের মান NULL হতে পারবে না।NULL মান ইনসার্ট করা: যদি আপনি কোন কলামে NULL মান ইনসার্ট করতে চান, তাহলে
NULLশব্দটি ব্যবহার করা হয়। উদাহরণ:INSERT INTO employees (name, salary, department) VALUES ('John Doe', NULL, 'Engineering');এখানে
salaryকলামেNULLমান ইনসার্ট করা হচ্ছে।NULL মান সিলেক্ট করা: যখন আপনি NULL মান নির্বাচন করতে চান, তখন
IS NULLবাIS NOT NULLব্যবহার করতে হয়। উদাহরণ:SELECT * FROM employees WHERE salary IS NULL;এই কুয়েরি
salaryকলামে NULL মান রয়েছে এমন সমস্ত রেকর্ড নির্বাচন করবে।NULL মান আপডেট করা: একটি কলামে NULL মান আপডেট করতে
UPDATEকমান্ডেSETব্যবহার করা হয়। উদাহরণ:UPDATE employees SET salary = NULL WHERE name = 'John Doe';এই কুয়েরি
John Doeএরsalaryকলামের মান NULL এ পরিবর্তন করবে।NULL মান ডিলিট করা: NULL মান ডিলিট করার জন্য
DELETEকমান্ডের সাথেWHEREশর্ত ব্যবহার করা হয়। উদাহরণ:DELETE FROM employees WHERE salary IS NULL;এই কুয়েরি
salaryকলামে NULL মান থাকা সমস্ত রেকর্ড মুছে ফেলবে।
NULL এর ব্যবহার সম্পর্কিত কিছু গুরুত্বপূর্ণ বিষয়
- NULL এবং Boolean অপারেশন:
- SQL-এ NULL ব্যবহার করার সময়, এটি সব সময় সত্য বা মিথ্যা না হয়ে, "UNKNOWN" হয়। তাই NULL এর সাথে সরাসরি তুলনা বা Boolean অপারেশন (যেমন: AND, OR) ব্যবহার করলে ফলাফল "UNKNOWN" হতে পারে। এজন্য
IS NULLএবংIS NOT NULLব্যবহার করা হয়।
- SQL-এ NULL ব্যবহার করার সময়, এটি সব সময় সত্য বা মিথ্যা না হয়ে, "UNKNOWN" হয়। তাই NULL এর সাথে সরাসরি তুলনা বা Boolean অপারেশন (যেমন: AND, OR) ব্যবহার করলে ফলাফল "UNKNOWN" হতে পারে। এজন্য
COALESCE()ফাংশন:- SQLite সহ SQL সিস্টেমে
COALESCE()ফাংশনটি NULL মান হ্যান্ডেল করতে ব্যবহৃত হয়। এটি NULL মান থাকলে অন্য একটি মান প্রদান করে। উদাহরণ:
SELECT name, COALESCE(salary, 0) AS salary FROM employees;এখানে যদি
salaryকলামে NULL থাকে, তবে এটি 0 দিয়ে প্রতিস্থাপন করা হবে।- SQLite সহ SQL সিস্টেমে
IFNULL()ফাংশন:IFNULL()ফাংশনও NULL মান হ্যান্ডেল করতে ব্যবহৃত হয় এবং এটিCOALESCE()এর মতো কাজ করে:
SELECT name, IFNULL(salary, 0) AS salary FROM employees;
সারাংশ
NULL একটি বিশেষ মান যা SQL ডাটাবেসে ব্যবহার করা হয়, যখন কোনো ডেটা অজানা বা অনুপস্থিত থাকে। এটি শূন্য (zero) বা ফাঁকা স্ট্রিং এর থেকে আলাদা, এবং SQL কুয়েরি লেখার সময় IS NULL বা IS NOT NULL ব্যবহার করে NULL মান যাচাই করা হয়। NULL ডেটা টাইপ ব্যবহারের সময় সাবধানতা অবলম্বন করা উচিত, বিশেষত তুলনা এবং Boolean অপারেশনগুলি করার সময়। COALESCE() এবং IFNULL() ফাংশন ব্যবহার করে NULL মান হ্যান্ডেল করা সহজ হয়।
SQLite এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল Flexible Typing বা Dynamic Typing। এটি SQLite এর ডেটাবেসে ডাটা টাইপ ব্যবস্থাপনার পদ্ধতি। সাধারণত, অনেক ডেটাবেস সিস্টেম যেমন MySQL, PostgreSQL ইত্যাদিতে ডেটাবেসে প্রতিটি কলামের জন্য একটি নির্দিষ্ট ডেটা টাইপ নির্ধারণ করা হয় (যেমন INTEGER, TEXT, DATE)। তবে, SQLite এর ক্ষেত্রে এটি কিছুটা আলাদা, কারণ এটি একটি টাইপলেস (type-less) বা ডাইনামিক টাইপিং সিস্টেম ব্যবহার করে, যেখানে ডাটা ইনসার্ট করার সময় কলামের ডেটা টাইপের সঙ্গে সামঞ্জস্য রাখার কোনো বাধ্যবাধকতা নেই।
Flexible Typing এর মূল ধারণা
SQLite Flexible Typing এর মাধ্যমে এটি সম্ভব যে, আপনি যেকোনো কলামে যেকোনো ডেটা টাইপের ডেটা রাখতে পারেন। এতে কলাম বা টেবিলের নির্দিষ্ট ডেটা টাইপের সাথে মিল রেখে ডাটা রাখার কোনো বাধ্যবাধকতা নেই। অর্থাৎ, একটি কলামে আপনি INTEGER টাইপের ডেটা রাখতে পারেন, কিন্তু একই কলামে আপনি TEXT বা REAL টাইপের ডেটাও রাখতে পারবেন।
১. SQLite এর ডেটা টাইপগুলি
SQLite এর ভেতরে পাঁচটি মৌলিক ডেটা টাইপ রয়েছে:
- NULL: কোনো মান না থাকা।
- INTEGER: পূর্ণসংখ্যা।
- REAL: দশমিক সংখ্যা (ফ্লোটিং পয়েন্ট সংখ্যা)।
- TEXT: পাঠ্য বা স্ট্রিং ডেটা।
- BLOB: বাইনারি ডেটা (যেমন: ছবি, ফাইল ইত্যাদি)।
SQLite এর মধ্যে টাইপের নির্দিষ্টতা খুবই নমনীয়, এবং এগুলি শুধু শর্তসাপেক্ষ ব্যবহৃত হয়। এটি Type Affinity নামে পরিচিত।
২. Type Affinity
SQLite এ Type Affinity হল এমন একটি ব্যবস্থা যা টেবিলের কলামের জন্য একটি প্রাথমিক ডেটা টাইপ নির্দেশ করে, তবে এটি ডেটা সন্নিবেশ (insertion) এবং নির্বাচনে টাইপ যাচাই করে না। উদাহরণস্বরূপ, আপনি যদি একটি কলামকে TEXT টাইপ হিসেবে ঘোষণা করেন, তবে আপনি সেখানে INTEGER বা REAL টাইপের ডেটাও সন্নিবেশ করতে পারবেন।
এখানে কিছু উদাহরণ দেওয়া হলো:
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
);
উপরে দেওয়া টেবিলের মধ্যে name কলামটি TEXT টাইপের জন্য ঘোষণা করা হয়েছে, কিন্তু আপনি সেখানে সংখ্যা (INTEGER) বা ফ্লোট (REAL) ডেটাও ইনসার্ট করতে পারবেন, যা SQLite এর Flexible Typing বা Dynamic Typing বৈশিষ্ট্যের প্রমাণ।
৩. Flexible Typing এর উদাহরণ
ধরা যাক, আপনি একটি টেবিল তৈরি করেছেন যেখানে একটি কলামকে INTEGER টাইপ হিসেবে ঘোষণা করা হয়েছে, কিন্তু সেখানে আপনি ভিন্ন ধরনের ডেটা (যেমন টেক্সট বা ফ্লোট) সন্নিবেশ করতে চান:
CREATE TABLE products (
product_id INTEGER PRIMARY KEY,
product_name TEXT,
price INTEGER
);
এখন, এই টেবিলের price কলামে আপনি INTEGER টাইপের ডেটা রাখবেন বলে মনে করা হলেও, আপনি সেখানে REAL বা TEXT টাইপের ডেটাও রাখতে পারবেন:
INSERT INTO products (product_name, price) VALUES ('Laptop', 999.99); -- Real number inserted
INSERT INTO products (product_name, price) VALUES ('Smartphone', 'Five Hundred'); -- Text inserted
এটি SQLite এর Flexible Typing এর মাধ্যমে সম্ভব। price কলামে আপনি ভিন্ন ধরনের ডেটা রাখতে পারবেন, যদিও এটি INTEGER টাইপের জন্য তৈরি হয়েছে।
৪. Type Affinity এর প্রভাব
SQLite এর Type Affinity এর মাধ্যমে আপনি কলামের প্রাথমিক টাইপ ডিক্লেয়ার করে থাকলেও, আপনি ঐ কলামে যেকোনো ডেটা টাইপ ইনসার্ট করতে পারেন। উদাহরণস্বরূপ, INTEGER কলামে TEXT ডেটা রাখলে এটি স্টোর হবে, তবে সিস্টেম টাইপের অপারেশনগুলিতে কিছু বিভ্রান্তি হতে পারে, যেমন গণনা বা অর্ডারিংয়ে।
তবে, SQLite টাইপের ব্যাপারে নমনীয় হলেও, পূর্ণসংখ্যা (INTEGER) এবং টেক্সট (TEXT) এর মধ্যে কিছু পার্থক্য থাকতে পারে যখন আপনি SELECT বা অন্যান্য SQL অপারেশন করবেন।
৫. Flexible Typing এর সুবিধা
- নমনীয়তা: SQLite ডাটাবেসে সন্নিবেশ বা আপডেট করার সময় টাইপ চেকিং খুব কম বা নেই, যা ডেভেলপারদের জন্য একটি নমনীয় ডাটাবেস ডিজাইন তৈরি করতে সহায়তা করে।
- সরলতা: ছোট প্রকল্পগুলিতে বা মোবাইল অ্যাপ্লিকেশনগুলিতে ব্যবহার করা সহজ এবং দ্রুত।
- ডাটা আপডেটের সুবিধা: আপনি সহজেই ডেটার টাইপ পরিবর্তন করতে পারেন যদি আপনি কোনো কলামে নতুন টাইপের ডেটা রাখতে চান।
সারাংশ
SQLite এর Flexible Typing বা Dynamic Typing এর মাধ্যমে ডাটাবেসে বিভিন্ন ধরনের ডেটা রাখার সুযোগ প্রদান করা হয়, এমনকি যখন কলামটি কোনো নির্দিষ্ট টাইপের জন্য তৈরি হয়। এটি SQLite-কে আরও নমনীয় এবং ব্যবহারকারী-বান্ধব করে তোলে, তবে টাইপ অমিলের কারণে কিছু সমস্যা হতে পারে, যেমন ডাটা যাচাই বা অপারেশনগুলিতে অপ্রত্যাশিত ফলাফল।
SQLite একটি ফাইলভিত্তিক ডেটাবেস সিস্টেম যা SQL (Structured Query Language) ব্যবহার করে ডাটাবেস পরিচালনা করে। SQLite তে আপনি কাস্টম ডেটা টাইপ তৈরি করতে পারেন, যা বিশেষ ধরনের ডেটা পরিচালনা করার জন্য উপকারী। SQLite ডিফল্টভাবে কিছু প্রাথমিক ডেটা টাইপ যেমন INTEGER, TEXT, REAL, BLOB, ইত্যাদি সমর্থন করে, তবে আপনি কাস্টম ডেটা টাইপও তৈরি করতে পারেন।
SQLite তে কাস্টম ডেটা টাইপ তৈরি করতে, আপনি CREATE TYPE কমান্ড ব্যবহার করতে পারেন, অথবা User Defined Functions (UDFs) ব্যবহার করতে পারেন।
১. কাস্টম ডেটা টাইপ তৈরি করা (SQLite এ UDF ব্যবহার)
SQLite-এ কাস্টম ডেটা টাইপ তৈরি করতে সরাসরি CREATE TYPE কমান্ড নেই, তবে আপনি User Defined Functions (UDFs) ব্যবহার করে কাস্টম ডেটা টাইপ তৈরি করতে পারেন।
উদাহরণ: কাস্টম phone_number ডেটা টাইপ
ধরা যাক, আপনি একটি কাস্টম ডেটা টাইপ তৈরি করতে চান যা ফোন নম্বর সংরক্ষণ করবে। SQLite এর TEXT ডেটা টাইপ ব্যবহার করা হবে, কিন্তু আপনি নিশ্চিত করতে চান যে এটি একটি বৈধ ফোন নম্বর।
এখানে Python দিয়ে SQLite তে কাস্টম UDF (User Defined Function) তৈরি করার উদাহরণ দেওয়া হলো।
Python দিয়ে কাস্টম ডেটা টাইপ উদাহরণ
১.1 Python SQLite UDF তৈরি করা
SQLite এর সাথে Python ব্যবহার করে কাস্টম ডেটা টাইপ তৈরির জন্য প্রথমে Python এর sqlite3 লাইব্রেরি ব্যবহার করতে হবে।
import sqlite3
import re
# কাস্টম UDF তৈরি করা
def validate_phone_number(phone_number):
# ফোন নম্বরের বৈধতা যাচাই
if re.match(r"^\+?[0-9]{10,15}$", phone_number):
return phone_number
else:
raise ValueError("Invalid phone number format")
# SQLite ডাটাবেস তৈরি এবং UDF রেজিস্টার করা
conn = sqlite3.connect('example.db')
# কাস্টম ফাংশন রেজিস্টার করা
conn.create_function("validate_phone", 1, validate_phone_number)
# একটি টেবিল তৈরি করা
conn.execute('''CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT,
phone_number TEXT
)''')
# কাস্টম ফোন নম্বর যাচাইয়ের সাথে ডাটা ইনসার্ট করা
try:
conn.execute("INSERT INTO users (name, phone_number) VALUES (?, ?)",
('Alice', '+1234567890')) # Valid phone number
conn.execute("INSERT INTO users (name, phone_number) VALUES (?, ?)",
('Bob', '12345')) # Invalid phone number, will raise an error
except ValueError as e:
print(f"Error: {e}")
# ডাটাবেস থেকে ডাটা পড়া
cursor = conn.execute("SELECT * FROM users")
for row in cursor:
print(row)
# সংযোগ বন্ধ করা
conn.commit()
conn.close()
ব্যাখ্যা:
validate_phone_numberফাংশনটি একটি কাস্টম ডেটা টাইপ হিসেবে কাজ করে, যা ফোন নম্বরের বৈধতা পরীক্ষা করে।create_functionফাংশনটি SQLite ডাটাবেসেvalidate_phoneনামের একটি নতুন ফাংশন রেজিস্টার করে।- ইনসার্ট অপারেশনে এটি ফোন নম্বরের জন্য কাস্টম ফাংশন ব্যবহার করে, যাতে এটি সঠিক ফরম্যাটে থাকে।
- যদি ইনপুটে ভুল ফরম্যাটের ফোন নম্বর দেওয়া হয়, তবে এটি একটি
ValueErrorত্রুটি ছুড়ে দেবে।
২. কাস্টম ডেটা টাইপের ব্যবহার
SQLite তে কাস্টম ডেটা টাইপের ব্যবহার অনেক ক্ষেত্রে উপকারী হতে পারে, বিশেষ করে যখন আপনার এমন ডেটা প্রয়োজন যা সাধারণ ডেটা টাইপে সংরক্ষণ করা যায় না বা আপনি কিছু নির্দিষ্ট বৈধতা যাচাই করতে চান।
উদাহরণ: কাস্টম email ডেটা টাইপ
ধরা যাক, আপনি একটি কাস্টম email ডেটা টাইপ তৈরি করতে চান যা ইমেল অ্যাড্রেসের বৈধতা যাচাই করবে। আপনি উপরে যেমন ফোন নম্বরের উদাহরণ দেখেছিলেন, তেমনই validate_email নামের একটি ইউজার ডিফাইন্ড ফাংশন তৈরি করতে পারেন যা ইমেল ঠিকানার বৈধতা যাচাই করবে।
import sqlite3
import re
# কাস্টম UDF তৈরি করা
def validate_email(email):
# ইমেল ঠিকানার বৈধতা যাচাই
if re.match(r"[^@]+@[^@]+\.[^@]+", email):
return email
else:
raise ValueError("Invalid email address format")
# SQLite ডাটাবেস তৈরি এবং UDF রেজিস্টার করা
conn = sqlite3.connect('example.db')
# কাস্টম ফাংশন রেজিস্টার করা
conn.create_function("validate_email", 1, validate_email)
# একটি টেবিল তৈরি করা
conn.execute('''CREATE TABLE IF NOT EXISTS contacts (
id INTEGER PRIMARY KEY,
name TEXT,
email TEXT
)''')
# কাস্টম ইমেল যাচাইয়ের সাথে ডাটা ইনসার্ট করা
try:
conn.execute("INSERT INTO contacts (name, email) VALUES (?, ?)",
('Alice', 'alice@example.com')) # Valid email
conn.execute("INSERT INTO contacts (name, email) VALUES (?, ?)",
('Bob', 'bob@com')) # Invalid email, will raise an error
except ValueError as e:
print(f"Error: {e}")
# ডাটাবেস থেকে ডাটা পড়া
cursor = conn.execute("SELECT * FROM contacts")
for row in cursor:
print(row)
# সংযোগ বন্ধ করা
conn.commit()
conn.close()
ব্যাখ্যা:
validate_emailফাংশনটি একটি কাস্টম ডেটা টাইপ হিসেবে কাজ করে, যা ইমেল ঠিকানার বৈধতা পরীক্ষা করে।create_functionফাংশনটি SQLite ডাটাবেসেvalidate_emailনামের একটি নতুন ফাংশন রেজিস্টার করে।- ইনসার্ট অপারেশনে এটি ইমেল অ্যাড্রেসের জন্য কাস্টম ফাংশন ব্যবহার করে, যাতে তা সঠিক ফরম্যাটে থাকে।
সারাংশ
SQLite তে কাস্টম ডেটা টাইপ তৈরি করা সম্ভব, তবে SQLite তে সরাসরি CREATE TYPE কমান্ড নেই। আপনি User Defined Functions (UDFs) ব্যবহার করে কাস্টম ডেটা টাইপ তৈরি করতে পারেন। Python এর মাধ্যমে SQLite তে কাস্টম ডেটা টাইপ তৈরি করার মাধ্যমে আপনি আপনার ডাটাবেসের মধ্যে কিছু নির্দিষ্ট বৈধতা যাচাই, যেমন ফোন নম্বর বা ইমেল ঠিকানা যাচাই, সহজে করতে পারেন।
Read more