Table of contents
- DATABASE এর MIGRATION আমরা DDL এর যে কমান্ড গুলো চালায় সেগুলো হলোঃ
- DATABASE এর MIGRATION আমরা DML এর যে কমান্ড গুলো চালায় সেগুলো হলোঃ
- \=>DCL =>মূলত বিভিন্ন পারমিশন এর ক্ষেত্রে ব্যাবহত হয়।কন্ট্রোল টাইপ।
- \=>TCL
- ডেটাবেজ মাইগ্রেশন এর ডিফল্ট যে ফিল্ড গুলো থাকে।
- \=>STRING
- সাধারনত ছোটখাট কেইস গুলোতে STRING DATATYPE ব্যাবহার করা হয়।যেমন অল্প কিছূ লেটার লেখা লাগবে।
- \=>INTEGER
- \=>FLOAT
- \=>VARCHAR
- এক্ষেত্রে আপনার কমান্ড হবে।
- DATABASE RELATION:
- \==================
- \==>ONE TO ONE RELATION
- \==>FOREIGNKEY -->নাম দেখে হয়ত আন্দাজ করতে পারছেন।এটা অন্য টেবিলের ইউনিক একটা কি হতে হবে।(অবশ্যই ইউনিক হতে হবে)
- \==>ONE TO MANY RELATION
- \==>MANY TO MANY RELATION
- RELATION
- \========
- USER এর মধ্যে ROLE && ROLE এর মধ্যে USERS
- FACTORY
- \=========
- SEEDER
- \=========
অবশ্যই আজকের টপিক টা অনেক গুরুত্বপূর্ন একটা টপিক,এবং সেই সাথে বুঝতেো বেশ সময় লাগতে পারে আজকের ক্লাস টা।কারন আস্তে,ক্লাস গুলো একটু ইন্টারমিডিয়েট লেভেল এর দিকে যাচ্ছে।
\==>ডেটাবেইজ এর ও language আছে ।
\=>sql(Structure Query Language )->আমরা যেটা ব্যাবহার করব।
এটা আবার ৪ ধরনের কুয়েরি হয়।
\=>TCL (Transaction Control Language)
\=>DML (Data Manipulation Language)
\=>DCL (Data Control Language)
\=>DDL (Data Definition Language)
DATABASE এর MIGRATION আমরা DDL এর যে কমান্ড গুলো চালায় সেগুলো হলোঃ
CREATE DDL Command
ALTER DDL Command
DROP DDL Command
TRUNCATE DDL Command
RENAME DDL Command
DATABASE এর MIGRATION আমরা DML এর যে কমান্ড গুলো চালায় সেগুলো হলোঃ
SELECT DML Command
INSERT DML Command
UPDATE DML Command
DELETE DML Command
এবং আর যে দুই টাইপ কুয়েরি আছে সেগুলো একটু কম ই ব্যাবহত হয়ে থাকে।
\=>DCL =>মূলত বিভিন্ন পারমিশন এর ক্ষেত্রে ব্যাবহত হয়।কন্ট্রোল টাইপ।
Grant DCL Command
Revoke DCL Command
\=>TCL
Commit TCL Command
Rollback TCL Command
ডেটাবেজ এর ক্ষেত্রে স্কিমা অনেক গুরুত্বপূর্ন ।স্কিমা বলতে সাধারনত বোঝায় কিভাবে ডেটাবেজ এর বিভিন্ন ফিল্ড এবং ডেটাবেজ এর টেবিল গুলো সাজানো আছে।
ডেটাবেজ মাইগ্রেশন এর ডিফল্ট যে ফিল্ড গুলো থাকে।
$table->timestamp();
এটা মূলত ব্যাবহত হয় সময় এর জন্য কোন সময় অপারেশন টা হয়েছে।created_at,updated_at.
এবার আশা যাক বেশ কিছু ডেটাটাইপ এ যেগুলো আমরা ব্যাবহার করে থাকি ডেটাবেজ মাইগ্রেশন এর ক্ষেত্রে।এবং বিভিন্ন programming language এ।
\=>STRING
সাধারনত ছোটখাট কেইস গুলোতে STRING DATATYPE ব্যাবহার করা হয়।যেমন অল্প কিছূ লেটার লেখা লাগবে।
যেমনঃ-"আমার নাম রাকিব"
\=>INTEGER
পুর্ন সংখার ডেটা টাইপ হলো integer.
যেমনঃ-1,2,3,4,5
\=>FLOAT
ভগ্নাংশ সংখা গুলোর ক্ষেত্রে float type
যেমনঃ- ২.৩,৫.৪।
\=>VARCHAR
এই ডেটা টাইপ টাও নামের ক্ষেত্রে বেশ ব্যাবহার করা হয়ে থাকে।
\=>char
\=>text
\=>LONGTEXT
etc
এই প্রত্যেক টা ডেটা টাইপ এর আবার লিমিট আছে যে কত সংখা,কত ক্যারাক্টার ব্যাবহার করবে।
CHAR(২৫৫)
VARCHAR( ২৫৫)
TEXT(65,535 bytes)
LONGTEXT(4,294,967,295 characters)
এখানে একটা প্রশ্ন থাকে যে ,string,char,varchar,text,longtext, সব ই তো string এর মত কাজ করে তাহলে কেন আমরা শুধু string,varchar,char
ব্যাবহার করে থাকি।
উত্তরঃ-আমরা বিভিন্ন ডেটা টাইপ এর সাইজ দেখেই বুঝে গেছি হয়ত।কারন আমরা স্ট্রিং ব্যাবহার করে থাকি অল্প কিছু ক্যারাক্টার আমাদের নামের ক্ষেত্রে ব্যাবহার করা হয়।
এক্ষেত্রে আমাদের মেমোরি অল্প লাগতেছে কিন্তু অন্যান্য ডেটা টাইপ গুলোর সাইজ বেশ বড় ।application এর সাইজ পরবর্তিতে বড় হয়ে যাবে এবং performance কম হবে।যার কারনে
string,char,varchar ব্যাবহার করা হয়।
\==>হারুন ভাই আরেকটা কথা বলেছেন যে indexing করতে গেলে,Text,longtext এ অনেক ঝামেলা পোহাতে হয়।যার কারনে string,char,varchar ব্যাবহার করা হয়।
database migration এ দুইটা ফাংশন কাজ করে ।
১।
public function up(){
//এখানে আমরা আমাদের ডেটাবেজ এর বিভিন্ন কলাম তৈরি করি।
}
২।
public function down(){
//এখানে আমরা আমাদের ডেটাবেজ এর বিভিন্ন কলাম প্রয়োজন অনুসারে ডিলিট করি/ড্রপ করি।
}
down function এ দারুন একটা কেইস আছে সেটা হল আপনি যদি আপনার কোন কলাম ড্রপ করেন পরবর্তিতে ।আবার যদি রান করেন migration তাহলে তখন আপনার up function
run হবে কিন্তু ডাউন ফাংশন রান হবে না। আবার যদি migrate করেন তখন আবার down function run হবে।
এক্ষেত্রে আপনার কমান্ড হবে।
\==>php artisan migrate:rollback
এটাকে ডেটাবেজ এর রোলব্যাক বা ভার্সনিং ও বলে।
DATABASE RELATION:
\==================
অনেক গুরুত্বপূর্ন এবং অনেক কনফিউশন একটা টপিক হলো এই ডেটাবেজ রিলেশন।বেশ কয়েকধরনের রিলেশন রয়েছে ডেটাবেজ এ এর মধ্যে সাধারন অবস্থায় কিছু রিলেশন কমন ভাবে ব্যাবহার হয়ে থাকে।
\==>One to One relation
\==>One to Many relation
\==>Many to one relation
\==>Many to many relation
\==>ONE TO ONE RELATION
টাইটেল দেখেই হয়ত বুঝতে পারছি এটা একটা টেবিলের সাথে আরেকটা টেবিলের one to one relation হচ্ছে।
রিলেশন এর ক্ষেত্রে বেশ কয়েকটা জিনিষ গুরুত্বপূর্ন।
\==>FOREIGNKEY -->নাম দেখে হয়ত আন্দাজ করতে পারছেন।এটা অন্য টেবিলের ইউনিক একটা কি হতে হবে।(অবশ্যই ইউনিক হতে হবে)
\==>ম্যানুয়ালি করতে গেলে আপনার রেফারেন্স লাগবে ।
\==>ONE TO MANY RELATION
এক্ষেত্রে আমরা বুঝতে পারছি একটা স্যারের সাথে একাধিক ছাত্রের রিলেশন।
database বেশ কয়েকধরনের অপশন আছে one to many relation এর তবে।
আপনি খুব সহজেই foreignkey দিয়ে column_name দিলে constraint এর মাধ্যমে আপনি তৈরি করে ফেলতে পারবেন।অবশ্য এক্ষত্রে Constraint ই রিলেশন তৈরি করে নেই।
public funtion orders(){
return $this->hasmany('orders','user_id');
}
এখানে ইউজার টেবিলের সাথে order table এর একটি one to many relation হচ্ছে।
\==>MANY TO MANY RELATION
বেশ complex একটা টার্ম কারন এখানে দুই সাইড থেকে এক জনের সাথে একাধিক জনের সম্পর্ক হয়ে থাকে।এবং এর মধ্যে একটা পিভট কাজ করে।
relation এর ক্ষেত্রে একটা জিনিষ মনে রাখতে হবে up & down function এর ক্ষেত্রে।
আমরা যখন কোন টেবিল drop করতে যাব সেক্ষেত্রে একটা বিষয় আমাদের মনে রাখতে হবে।আমরা কোন কলাম টি ডিলেট করব এবং কোন কলাম টি কোন টার ওপর ডিপেন্ডেন্ড।
যেটার ওপরে depended সেটা পরে ডিলেট করতে হবে।
যেটা অন্য একটা কলামের ওপরে ডিপেন্ড করে সেটি আগে ডিলেট করতে হবে।
RELATION
\========
many to many relation এর ক্ষেত্রে দুইটাই হবে belongstomany
খুব সহজেই রিলেশন তৈরি করতে পারি মডেল এর নাম ব্যাবহার করে।
//model role
public function users(){
return $this->belongstoMany(User::class);
}
//model users
public function roles(){
return $this->belongstoMany(Role::class);
}
USER এর মধ্যে ROLE && ROLE এর মধ্যে USERS
FACTORY
\=========
নাম দেখে হয়ত বুঝতে পারছেন এটার কাজ। এখানে মূলত আমাদের কর্ম জীবনের ফ্যাক্টরির মতোই পন্য উৎপন্ন হয় তবে সেটা নির্দিষ্ট কিছু ফেইক কলামে ফেইক ডেটা।
।একটি সুন্দর website কাঠামো দেখার জন্য website এ অবশ্যই content এর প্রয়োজন হয় কিন্ত develop করার সময় main content গুলো না দেওয়ার কারনে ।লারাভেল এর
এই factory থেকে ডামি ডেটা আমরা ব্যাবহার করে থাকি খুব অল্প সময়েই আমাদের প্রয়োজন অনুসারে ডেটা ব্যাবহার করতে পারি।
SEEDER
\=========
বীজ বপ্ন।আমরা যখন ফ্যাক্টরি তে ডেটা তৈরি করি সেই ডেটা গুলো প্রয়োজন অনুসারে বিভিন্ন টেবিলে,কলামে দেওয়া লাগে তাই এই সিডারের প্রয়োজন হয়ে থাকে।আমাদের সীডার ফাইলের ফাংশনের মধ্যে
আমরা আমাদের প্রয়োজুন অনুসারে ডেটাবেজ টেবিলের কলাম অনুসারে ডেটা জেনারেট করতে পারি।
public function definition(){
returnp[
'name'=>fake()->name(),
'email'=>fake()->eemail()
];
}
এক্ষত্রে কমান্ড টি হলোঃ
php artisan migrate:fresh --seed
এখানে migration ও করা হল আবার সীডার ও করা হলো;
এটি ক্লাসের ওভারভিউ এর সাথে কিছু বিষয় add করেছি।আশা করি সবাই বুঝতে পারবেন।
আপনারা আরো বেশি ভাল করে জানতে চাইলে প্রত্যেক টা টপিক কপি করে গুগলে সার্চ করবেন এবং সেই নির্দিষ্ট টপিক ভাল ভাবে পড়বেন আশা করি আরো অনেক কিছু জানতে পারবেন।
ধন্যবাদ।
___RAKIBUL ISLAM___