এসকিউএল ফরেন কি কন্সট্রেইন্ট .

এসকিউএল ফরেন কি কন্সট্রেইন্ট
Sheikh Mahfuzur Rahman

একটি টেবলের FOREIGHN KEY অন্য টেবলের PRIMARY KEY এর দিকে নির্দেশ করে। একটি উদাহরণের মাধ্যমে “ফরেন কি” কে ব্যাখ্যা করা যাক। নিচের দুটো টেবলের দিকে লক্ষ্য করুন যার একটি হলো ”Persons” টেবল এবং অন্যটি হলো “Orders” টেবলঃ

The “Persons” table:
P_Id
LastName
FirstName
Address
City
1
Hansen
Ola
Timoteivn 10
Sandnes
2
Svendson
Tove
Borgvn 23
Sandnes
3
Pettersen
Kari
Storgt 20
Stavanger
The “Orders” table:
O_Id
OrderNo
P_Id
1
77895
3
2
44678
3
3
22456
2
4
24562
1

লক্ষ্য করুন, “Orders”টেবলের “P_Id” কলাম ”Persons” টেবলের ”P_Id” কলামের দিকে নির্দেশ করছে। তাই এখানে ”Persons” টেবলের “P_Id” কলাম হলো এই টেবলের প্রাইমারি কি; অন্যদিকে ”Orders” টেবলের “P_Id” কলাম হলো ”Orders” টেবলের ফরেন কি।
কিছু কিছু কার্যক্রম, যেগুলো টেবল থেকে টেবলের যে লিংক রয়েছে তা নষ্ট করে দিতে পারে, বন্ধ করার জন্য FOREIGHN KEY ব্যবহৃত হয়। FOREIGHN KEY কন্সট্রেইন্ট ফরেন কি কলামে ভুল বা ইনভ্যালিড ডাটা প্রবেশ করানোর ক্ষেত্রেও বাধা দেয় কারন এটি শুধুমাত্র সেই ভ্যালুগুলো ধারণ করতে পারবে যা অন্য টেবলের প্রাইমারি কি কলামে সংরক্ষিত রয়েছে।

CREATE TABLE এ এসকিউএল FOREIGHN KEY কন্সট্রেইন্ট
নিচের এসকিউএল সিন্টেক্সটটি ”Orders” টেবল তৈরি করার সময় তার “P_Id” কলামে একটি FOREIGHN KEY তৈরি করে; বিভিন্ন ডাটাবেজ সিস্টেমে ফরেন কি’র এসকিউএলগুলো দেখে নেয়া যাকঃ
MySQL:
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

FOREIGHN KEY কন্সট্রেইন্টের নামকরন করার জন্য এবং অনেকগুলো কলামে একটি FOREIGHN KEY কন্সট্রেইন্ট সংজ্ঞায়িত করার জন্য নিচের এসকিউএল সিন্টেক্সট ব্যবহার করুনঃ
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)

ALTER TABLE এ এসকিউএল FOREIGHN KEY কন্সট্রেইন্ট
যেখানে “Orders” টেবলটি ইতোমধ্যেই তৈরি করা হয়ে গেছে সেক্ষেত্রে “Orders” টেবলের ‘”P_Id” কলামে একটি FOREIGHN KEY” কন্সট্রেইন্ট তৈরি করতে নিচের এসকিউএল’টি ব্যবহার করুনঃ
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

ফরেন কি কন্সট্রেইন্টের নামকরন করার জন্য এবং অনেকগুলো কলামে একটি ফরেন কি কন্সট্রেইন্ট সংজ্ঞায়িত করার জন্য(ALTER TABLE এর ক্ষেত্রে) নিচের এসকিউএল সিন্ট্যাক্সট ব্যবহার করুনঃ
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

একটি ফরেন কি কন্সট্রেইন্ট ড্রপ করার জন্য
একটি FOREIGHN KEY কন্সট্রেইন্ট DROP অর্থাৎ সেটি বাদ দেয়ার জন্য নিচের এসকিউএল’টি ব্যবহার করুনঃ
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

SQL (এসকিউএল) NULL Values(মান): SQL Null Values

SQL (এসকিউএল) NULL Values(মান):
Null value বলতে অনুপস্থিত বা মানহীন data বুঝায় । এর মান কখন শুন্য বা খালি স্ট্রিং
(String) হয় না এবং এই শুন্য বা খালি স্ট্রিং(String) একটি মান প্রকাশ করে কিন্তু আমরা জানি NULL এর কোন মান নেই । NULL এর মান NULL এ গঠিত গাণিতিক ফলাফল দ্বারা নির্ণয় করা হয় । যেমনঃ 10 + NULL = NULL

পদবিন্যাস (Syntax):

SQL> CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);

এখানে NOT NULL মানে কলাম সবসময় একটি সুনির্দিষ্ট মান গ্রহণ করে যার মান দেয়া থাকে । এখানে দুটি কলাম আছে যেখানে আমরা NOT NULL ব্যাবহার করি নাই যার মানে এই কলামগুলো NULL হতে পারে ।
NULL value এমন একটি মান যা কোন রেকর্ড নির্মাণের সময় খালি রাখা হয় ।

যেমনঃ
আপনাকে অবশ্যই NULL value চেক করার সময় হয় IS NULL অথবা IS NOT NULL অপারেটর
ব্যবহার করতে হবে । নিচের টেবিলে CUSTOMERS-এর নিম্নলিখিত বিবরণ রয়েছেঃ

+—-+———-+—–+———–+———-+
| ID | NAME | AGE | ADDRESS | SALARY |
+—-+———-+—–+———–+———-+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | |
| 7 | Muffy | 24 | Indore | |
+—-+———-+—–+———–+———-+

নিম্নলিখিত উদাহরণটি IS NOT NULL অপারেটর:

SQL> SELECT ID, NAME, AGE, ADDRESS, SALARY
FROM CUSTOMERS
WHERE SALARY IS NOT NULL;

যা নিম্নলিখিত ফলাফল প্রকাশ করেঃ

+—-+———-+—–+———–+———-+
| ID | NAME | AGE | ADDRESS | SALARY |
+—-+———-+—–+———–+———-+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
+—-+———-+—–+———–+———-+

নিম্নলিখিত উদাহরণটি IS NULL অপারেটর:

SQL> SELECT ID, NAME, AGE, ADDRESS, SALARY
FROM CUSTOMERS
WHERE SALARY IS NULL;

যা নিম্নলিখিত ফলাফল প্রকাশ করেঃ

+—-+———-+—–+———–+———-+
| ID | NAME | AGE | ADDRESS | SALARY |
+—-+———-+—–+———–+———-+
| 6 | Komal | 22 | MP | |
| 7 | Muffy | 24 | Indore | |
+—-+———-+—–+———–+———-+

SQL DROP INDEX, DROP TABLE, and DROP DATABASE

Title: SQL DROP INDEX, DROP TABLE, and DROP DATABASE
অনুবাদক: ফয়সাল রকি (এম.এ)
Total word count: 164

DROP statement এর সাহায্যে Indexes, tables কিংবা databases কে সহজেই deleted বা removed করা যায়।
The DROP INDEX Statement
DROP INDEX statement ব্যবহার করে একটি table এর একটি index কে delete করা যায়।
MS Access এর ক্ষেত্রে ব্যবহৃত DROP INDEX সিনট্যাক্স (Syntax) হলো:
DROP INDEX index_name ON table_name

MS SQL Server এর ক্ষেত্রে ব্যবহৃত DROP INDEX সিনট্যাক্স (Syntax) হলো:
DROP INDEX table_name.index_name

DB2/Oracle এর ক্ষেত্রে ব্যবহৃত DROP INDEX সিনট্যাক্স (Syntax) হলো:
DROP INDEX index_name

MySQL এর ক্ষেত্রে ব্যবহৃত DROP INDEX সিনট্যাক্স (Syntax) হলো:
ALTER TABLE table_name DROP INDEX index_name

The DROP TABLE Statement
DROP TABLE statement কোনো একটি table কে delete করার ক্ষেত্রে ব্যবহৃত হয়।

The DROP DATABASE Statement
DROP DATABASE Statement কোনো একটি database কে delete করার ক্ষেত্রে ব্যবহৃত হয়।

The TRUNCATE TABLE Statement
যখন আমরা কোনো table হতে নির্দিষ্ট কিছু data delete করতে চাইবো তখন TRUNCATE TABLE Statement এর সাহায্যে তা করা হয়। উল্লেখ্য যে, এক্ষেত্রে পুরো table টিকে delete করা হয় না। TRUNCATE TABLE Statement নিম্নে দেখানো হলো:
TRUNCATE TABLE table_name

SQL Date Functions

নাম-শরিফুল ইসলাম
Job category-Php Coder

বিষয়- SQL Date Functions
এটি একটি কঠিন বিষয় যখন আমরা date নিয়ে কাজ করব নির্দিষ্ট ভাবে আমাদের date format জেনে নিতে হবে।আমরা date নিয়ে কাজ করতে গেলে এর কয়েকটি ফরম্যাট আমাদের জানতে হবে।
Now()-বর্তমান সময় এবং তারিখ পাওয়া যাবে
CURDATE()-বর্তমান তারিখ পাওয়া যাবে
CURTIME()-বর্তমান সময় পাওয়া যাবে
EXTRACT()-সময়/তারিখ এর একটি single পার্ট পাওয়া যাবে।
DATEDIFF()-দুটি তারিখের মাঝের সময় নির্ধারণ করবে।
DATE_FORMAT()-ভিন্ন ভিন্ন format এর date/time ডিসপ্লে করবে।
এখন আমরা NOW() কাজে লাগিয়ে একটি টেবিল তৈরি করব। যেকোনো একটি নাম দিয়ে একটি ডাটাবেস তৈরি করি। SQL window তে গিয়ে নিচের query টি চালনা করি
CREATE TABLE Orders
(
OrderId int NOT NULL,
ProductName varchar(50) NOT NULL,
OrderDate datetime NOT NULL DEFAULT NOW(),
PRIMARY KEY (OrderId)
)
Save বাটন এ ক্লিক করার পর আবার sql window তে গিয়ে নিচের কোড টুকু টাইপ করি
INSERT INTO Orders (ProductName) VALUES (‘Jarlsberg Cheese’)
এবং রান করলে আমরা নিচের মতন দেখতে পাব
OrderId ProductName OrderDate
1 Jarlsberg Cheese 2015-01-25 13:23:44.657
মানে orderdate সময় এবং তারিখ সহ ইনপুট হয়েছে।একটু যদি লক্ষ্য করি আমরা orderdate এ কোন ডাটা কিন্ত ইনপুট সে অটোমেটিক কম্পিউটার থেকে টাইম ও তারিখ জেনে নিয়ে নিজেই বসিয়েছে। অর্থাৎ যদি
NOW() ব্যবহার করতে চাইলে লিখতে হবে
OrderDate datetime NOT NULL DEFAULT NOW()
CURDATE()ব্যবহার করতে চাইলে লিখতে হবে
OrderDate datetime NOT NULL DEFAULT CURDATE()
CURTIME()ব্যবহার করতে চাইলে লিখতে হবে
OrderDate datetime NOT NULL DEFAULT CURTIME()
SQL QUERY এর মাধ্যমে যদি আমরা date select করে কোন ডাটা বের করতে চাই
তাহলে লিখতে হবে
SELECT NOW(),CURDATE(),CURTIME()
এবং আমরা যে ফলাফল তা পাব
NOW() CURDATE() CURTIME()
2015-01-25 12:45:34 2015-01-25 12:45:34

যদি আমরা দুটি date এর মাঝে difference খুজে পেতে চাই তাহলে ব্যবহার করব
SELECT DATEDIFF(‘2014-11-30′,’2014-11-29′) AS DiffDate
তাহলে ফলাফল আসবে ১
এখন আসা যাক কিভাবে date format ঠিক করতে হয়
SYNTAX
DATE_FORMAT(date,format)
date ফরম্যাট ঠিক রাখার জন্য আমরা কিছু ফিচার ব্যবহার করতে পারি
%a=সপ্তাহের দিনের নাম
%b=মাসের নাম
%c=মাস numeric
%D=দিন ইংলিশ suffix অনুযায়ী
%d= দিন numeric(00-31)
%e=দিন numeric(0-31)
%H=ঘণ্টা (00-23)
%h=ঘণ্টা (01-12)
%I= ঘণ্টা (01-12)
%i=minutes numeric(00-59)
%M=মাসের নাম
%m=মাসের নাম numeric(01-12)
%p=AM/PM
%s=সেকেন্ড (00-59)
%W=সপ্তাহের নাম
%w=সপ্তাহের নাম numeric(01-07)
%Y=বছর ৪ ডিজিট
%y=বছর ২ ডিজিট
SQL query এর মধ্যে যদি আমরা লিখি
DATE_FORMAT(NOW(),’%b %d %Y %h:%i %p’)
DATE_FORMAT(NOW(),’%m-%d-%Y’)
DATE_FORMAT(NOW(),’%d %b %y’)
DATE_FORMAT(NOW(),’%d %b %Y %T:%f’)
তাহলে আমাদের ফলাফল আসবে
Nov 04 2014 11:45 PM
11-04-2014
04 Nov 14
04 Nov 2014 11:45:34:243

SQL Not Null Constraint

নাম-শরিফুল ইসলাম
Job category-Php Coder

বিষয়- SQL Not Null Constraint
Null এর অর্থ কোন জাইগা ফাকা থাকা।সাধারনত কোন টেবিল এর ফিল্ড যদি আমরা কোন কিছু না ইনপুট করে থাকি এবং সেভ করি তাহলে জাইগা টা ফাকা থাকে কিন্তু mysql database এ সেটিংস্‌ ঠিক করে দিলে সেই জাইগা আমরা যতক্ষণ পর্যন্ত কোন ডাটা না ইনপুট করব ততখন সম্পূর্ণ রো কখনই অ্যাড হবে না। সেই ক্ষেত্রে আমাদের টেবিল এর কোন ফিল্ড কে বলে দিতে হবে যে এই ফিল্ড টি not null ।তাহলেই আমাদের এই নিয়মটি কাজে লাগবে। প্রথমে আমরা একটি ডাটাবেস তৈরি করি। এরপর create বাটন এ ক্লিক করি। ডাটাবেস তৈরি হয়ে যাওয়ার পর উপরের উপরের মেনু থেকে SQL বাটন এ ক্লিক করি একটি উইন্ডো আসবে। সেখানে নিচের কোড টুকু টাইপ করি
CREATE TABLE PersonsNotNull
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
এবং সবশেষে go button এ ক্লিক করলে আমাদের ডাটাবেসের টেবিল তৈরি হয়ে গেল। এরপর আবার উপড়ের মেন্যু ত্থেকে insert বাটন এ ক্লিক করলে নতুন ডাটা এন্ট্রি করার জাইগা দেখা যাবে। একটি রো insert করুন শুধু LastName ঘরটা ফাকা রেখে এবং go button এ ক্লিক করুন দেখবেন কোন ডাটাই যোগ হচ্ছে না মানে আপনের not null ব্যবহার করার কারনে এই রকম টি হচ্ছে যদি আগে আপনি not null না সেটিংস্‌ করতেন তাহলে সহজেই যেকোনো ডাটা ফাকা রেখেই পুরন করতে পারবেন।

SQL (এসকিউএল) CHECK Constraint (কনস্‌স্ট্রেইন্ট)

SQL (এসকিউএল) CHECK Constraint (কনস্‌স্ট্রেইন্ট)

Article By: Protap Chandra

CHECK constraint ব্যবহার করা হয় একটি কলামে কোন ধরনের বা কোন ডাটা ইনপুট দেয়া যাবে তার উপর নজর রাখার জন্য। যদি একটি কলামে CHECK constraint বেধে দেয়া হয় তবে সেই কলামে কেবলমাত্র ওইজাতীয় ডাটাই ইনপুট দেয়া সম্ভব হবে।

CREATE TABLE স্টেটমেন্টের সাথে CHECK Constraint প্রয়োগ:

নিচের এসকিউএল স্টেটমেন্টটি “Persons” টেবিলটি তৈরী করার সময় “P_Id” কলামে একটি CHECK constraint যুক্ত করবে। এই constraint এর কাজ হবে “P_Id” কলামে যেন কেবল পূর্ণসংখ্যা (integer) প্রবেশ করানো হয় এবং তার মান হবে শুন্যের চেয়ে বড়, সেদিকে নজর রাখা।

MySQL এর ক্ষেত্রে:

CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CHECK (P_Id>0)

)

SQL Server / Oracle / MS Access এর ক্ষেত্রে:

CREATE TABLE Persons

(

P_Id int NOT NULL CHECK (P_Id>0),

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

একাধিক কলামে CHECK constraint যুক্ত করতে নিচের SQL স্টেটমেন্টের syntax বা গঠনরীতি হবে নিম্নরূপ:

MySQL / SQL Server / Oracle / MS Access এর বেলায় প্রযোজ্য:

CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT chk_Person CHECK (P_Id>0 AND City=’Sandnes’)

)

ALTER TABLE স্টেটমেন্টের মাধ্যমে CHECK Constraint যুক্ত করা:

ধরা যাক Persons টেবিলটি আগেই তৈরী হয়ে গেছে। তৈরীর সময় এতে CHECK constraint দেয়া হয়নি। এখন সেই কাজটি করতে হবে। “P_Id” কলামে CHECK constraint যুক্ত করতে নিচের SQL স্টেটমেন্টটি ব্যবহার করতে হবে।

MySQL / SQL Server / Oracle / MS Access এর ক্ষেত্রে প্রযোজ্য:

ALTER TABLE Persons

ADD CHECK (P_Id>0)

টেবিল তৈরী করার পর একাধিক কলামে CHECK constraint যুক্ত করতে গেলে এসকিউএল স্টেটমেন্টের গঠনরীতি হবে নিম্নরূপ:

MySQL / SQL Server / Oracle / MS Access এর ক্ষেত্রে প্রযোজ্য:

ALTER TABLE Persons

ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City=’Sandnes’)

CHECK Constraint মুছে ফেলা:

CHECK constraint মুছে ফেলতে চাইলে নিচের SQL স্টেটমেন্ট ব্যবহার করতে হবে:

SQL Server / Oracle / MS Access এর ক্ষেত্রে প্রযোজ্য:

ALTER TABLE Persons

DROP CONSTRAINT chk_Person

MySQL এর ক্ষেত্রে:

ALTER TABLE Persons

DROP CHECK chk_Person

SQL (এসকিউএল) DROP INDEX, DROP TABLE এবং DROP DATABASE স্টেটমেন্ট . SQL Drop Index, Drop Table & Drop Database

SQL (এসকিউএল) DROP INDEX, DROP TABLE এবং DROP DATABASE স্টেটমেন্ট

Article By: Protap Chandra

ডাটাবেজে ডাটা ধরে রাখার এবং তা ব্যবহারে সুবিধার জন্য টেবিল, ইনডেক্স ইত্যাদি তৈরী করা হয়। কিন্তু এগুলো যদি প্রয়োজন না হয় তবে ইচ্ছা করলে মুছেও ফেলা যায়। এমনটি ডাটাবেজটিকেও প্রয়োজনে মুছে ফেলা সম্ভব। এখন আমরা শিখব কিভাবে এই কাজগুলো করা যায়।

নামের আগে DROP কমান্ড প্রয়োগ করে আমরা এগুলো মুছে ফেলতে পারি।

DROP INDEX স্টেটমেন্ট

DROP INDEX স্টেটমেন্ট ব্যবহার করা হয় টেবিল থেকে ইনডেক্স বা সূচি (index) মুছে ফেলার জন্য।

DROP INDEX গঠনরীতি:

MS Access এর ক্ষেত্রে:

DROP INDEX index_name ON table_name

MS SQL Server এর ক্ষেত্রে:

DROP INDEX table_name.index_name

DB2/Oracle এর ক্ষেত্রে:

DROP INDEX index_name

MySQL এর ক্ষেত্রে:

ALTER TABLE table_name DROP INDEX index_name

DROP TABLE স্টেটমেন্ট:

ডাটাবেজ থেকে কোনো একটি টেবিল মুছে ফেলতে DROP TABLE স্টেটমেন্ট ব্যবহার করা হয়। যেমন:

DROP TABLE table_name

DROP DATABASE স্টেটমেন্ট:

গোটা ডাটাবেজটিই মুছে ফেলতে DROP DATABASE স্টেটমেন্ট ব্যবহার করা হয়:

DROP DATABASE database_name

TRUNCATE TABLE স্টেটমেন্ট:

যদি কখনো টেবিল থেকে কেবল ডাটাগুলো মুছে দেয়ার প্রয়োজন হয় তখন আমরা কি করব? আমরা টেবিলটি মুছতে চাই না। সেক্ষেত্রে TRUNCATE TABLE স্টেটমেন্ট ব্যবহার করতে হবে:

TRUNCATE TABLE table_name

SQL (এসকিউএল) FOREIGN KEY কনস্ট্রেইন্টস্. SQL Foreign Key Constraint

SQL (এসকিউএল) FOREIGN KEY কনস্ট্রেইন্টস্

Article By: Protap Chandra

FOREIGN KEY কনস্ট্রেইন্ট ব্যবহার করা যায় টেবিলগুলোর মধ্যে আন্ত:সংযোগ যাতে নষ্ট না হয় তা নিশ্চিত করার জন্য। এছাড়া FOREIGN KEY কনস্ট্রেইন্ট foreign key যুক্ত কলামে অগ্রহণযোগ্য ডাটা ইনপুটে দেয়ার হাত থেকেও ব্যবহারকারীদের বিরত রাখে। কারণ FOREIGN KEY সঙ্গায়িত কলামে কেবল সেই ডাটা ইনপুট দেয়া যাবে যে ডাটা PRIMARY KEY তে আছে।

একটি টেবিলের FOREIGN KEY অন্য টেবিলে PRIMARY KEY এর সংগে সংযুক্ত।

নিচের দু’টি টেবিলের সাহায্যে আমরা FOREIGN KEY সম্পর্কে ধারণা নিব।

প্রথমটি হচ্ছে “Persons” টেবিল:

P_Id

LastName

FirstName

Address

City

1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

দ্বিতীয়টি হচ্ছে “Orders” টেবিল:

O_Id

OrderNo

P_Id

1 77895 3
2 44678 3
3 22456 2
4 24562 1

লক্ষ্য করুন, “Orders” টেবিলের “P_Id” কলাম “Persons” টেবিলের “P_Id” কলাম থেকে এসেছে। একারণে “Persons” টেবিলের “P_Id” কলাম “Persons” টেবিলের PRIMARY KEY.

অন্যদিকে, “Orders” টেবিলের “P_Id” কলাম “Orders” টেবিলের FOREIGN KEY.

নিচের SQL স্টেটমেন্টটি “Orders” টেবিল তৈরী করার সময় “P_Id” কলামটিকে FOREIGN KEY হিসেবে তৈরী করবে।

MySQL এর ক্ষেত্রে:

CREATE TABLE Orders

(

O_Id int NOT NULL,

OrderNo int NOT NULL,

P_Id int,

PRIMARY KEY (O_Id),

FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)

)

SQL Server / Oracle / MS Access এর ক্ষেত্রে:

CREATE TABLE Orders

(

O_Id int NOT NULL PRIMARY KEY,

OrderNo int NOT NULL,

P_Id int FOREIGN KEY REFERENCES Persons(P_Id)

)

একাধিক কলামে FOREIGN KEY কনস্ট্রেইন্ট তৈরী করতে নিচের SQL স্টেটমেন্ট ব্যবহার করতে হবে:

MySQL / SQL Server / Oracle / MS Access এর ক্ষেত্রে:

CREATE TABLE Orders

(

O_Id int NOT NULL,

OrderNo int NOT NULL,

P_Id int,

PRIMARY KEY (O_Id),

CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)

REFERENCES Persons(P_Id)

)

যদি আগে থেকে তৈরী করা একটি টেবিলের কোনো কলামে FOREIGN KEY কনস্ট্রেইন্ট যোগ করার প্রয়োজন হয় তবে নিচের SQL স্টেটমেন্ট ব্যবহার করতে হবে:

MySQL / SQL Server / Oracle / MS Access এর ক্ষেত্রে:

ALTER TABLE Orders

ADD FOREIGN KEY (P_Id)

REFERENCES Persons(P_Id)

যদি আগে থেকে তৈরী করা একটি টেবিলের FOREIGN KEY তে কোনো নাম যুক্ত করার প্রয়োজন হয়, তবে নিচের SQL স্টেটমেন্ট ব্যবহার করতে হবে:

MySQL / SQL Server / Oracle / MS Access এর ক্ষেত্রে:

ALTER TABLE Orders

ADD CONSTRAINT fk_PerOrders

FOREIGN KEY (P_Id)

REFERENCES Persons(P_Id)

FOREIGN KEY কনস্ট্রেইন্ট মুছে ফেলতে চাইলে নিচের SQL স্টেটমেন্ট ব্যবহার করতে হবে:

MySQL এর ক্ষেত্রে:

ALTER TABLE Orders

DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access ক্ষেত্রে:

ALTER TABLE Orders

DROP CONSTRAINT fk_PerOrders

এসকিউএল চেক কন্সট্রেইন্ট. SQL Check Constraint

এসকিউএল চেক কন্সট্রেইন্ট

এসকিউএল(SQL) কনস্ট্রেইন্টগুলোর(Constraint) মধ্যে অন্যতম হলো CHECK কন্সট্রেইন্ট। CHECK কন্সট্রেইন্ট একটি কলামে রাখার মতো ভ্যালু রেঞ্জকে সীমিত করে দেয়ার জন্য ব্যবহৃত হয়। যদি আপনি একটি কলামে CHECK কন্সট্রেইন্ট সংজ্ঞায়িত করে দেন তাহলে ঐ কলাম শুধুমাত্র নির্দিষ্ট কতগুলো ভ্যালু গ্রহন করতে পারবে। যদি একটি টেবলে CHECK কন্সট্রেইন্ট সংজ্ঞায়িত করে দেয়া হয় তাহলে সেটি নির্দিষ্ট কলামগুলোকে ঐ রো বা সারির অন্য কলামগুলোর ভ্যালু অনুসারে ভ্যালু গ্রহন করার যোগ্যতা সীমিত করে দেয়।

CREATE TABLE এ এসকিউএল CHECK কন্সট্রেইন্টঃ
নিচের এসকিউএল সিন্টেক্সটটি যখন “Persons” টেবল তৈরি করা হয় তখন “P_Id” কলামে একটি চেক কন্সট্রেইন্ট তৈরি করে। CHECK কন্সট্রেইন্টটি নির্ধারিত করে দেয় যে “P_Id” কলাম শুধুমাত্র শূন্য থেকে বড় পূর্ণ সংখ্যা(Integer) অন্তর্ভূক্ত করতে পারবে।

MySQL:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)

SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

CHECK কন্সট্রেইন্টের নামকরন করার জন্য এবং অনেকগুলো কলামে একটি CHECK কন্সট্রেইন্ট সংজ্ঞায়িত করার জন্য নিচের এসকিউএল সিন্ট্যাক্সট ব্যবহার করুনঃ

MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND City=’Sandnes’)
)

ALTER TABLE এ এসকিউএল CHECK কন্সট্রেইন্ট
যখন টেবলটি ইতোমধ্যেই তৈরি করা হয়ে গেছে তখন “P_Id” কলামে CHECK কন্সট্রেইন্ট তৈরি করতে নিচের এসকিএউএল সিন্টেক্সটি ব্যবহার করুনঃ

MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CHECK (P_Id>0)

CHECK কন্সট্রেইন্টের নামকরন করার জন্য এবং অনেকগুলো কলামে একটি CHECK কন্সট্রেইন্ট সংজ্ঞায়িত করার জন্য নিচের এসকিউএল সিন্ট্যাক্সট ব্যবহার করুনঃ

MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City=’Sandnes’)

CHECK কন্সট্রেইন্ট ড্রপ(DROP) করার জন্য নিচের এসকিউএলটি ব্যবহার করুনঃ

SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
MySQL:
ALTER TABLE Persons
DROP CHECK chk_Person

SQL প্রাইমারি Constraint . SQL Primary Key Constraint

SQL প্রাইমারি Constraint
RIAZ-UL-HAQUE MIAN
প্রাইমারি Constraint একটি টেবিল এর যেকোনো একটি কলাম এর স্বতন্ত্রতা/ uniqueness কে বুঝায় .
টেবিল এর প্রাইমারি কি অবশই ইউনিক হতে হবে এবং NULL হতে পারবেনা . প্রতিটা টেবিল এ ই একটা প্রাইমারি key থাকা উচীঠ
একটা টেবিল এর একটা মাত্র কলাম কে ই প্রাইমারি কি করতে পারবেন
এখন আমরা দেখব টেবিল তৈরী করার সময় কি ভাবে প্রাইমারি Constraint সেট করে |
ধরে নেই আমাদের একটা টেবিল তৈরী করতে হবে যার নাম Persons এবং সেই টেবিল এর একটা কলাম P_Id যাকে আমরা SQL প্রাইমারি Constraint সেট করব |
SQL Server / Oracle / MS Access queary টি হবে :
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
আর MySQL জন্য হবে :
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
)

এই কাজ টি একাধিক কলাম এর জন্য করতে হলে নিচের queary টি লিখতে হবে (MySQL / SQL Server / Oracle / MS Access:)
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
এত্তক্ষন আমরা দেখলাম কিভাবে একটা টেবিল তৈরী করার সময় প্রাইমারি Constraint
সেট করে। এবার মনে করি Persons টেবিল টি আগে থাকে ই তৈরী করা আছে এখন আমাদের কে P_Id প্রাইমারি Constraint সেট করতে হবে। এক্ষেত্রে আমরা অল্টার টেবিল statement ব্যবহার করব
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
এক্ষেত্রে টেবিল cloumn আগে থেকে ই not NULL করা থাকতে হবে
সব শেষে দেখব কিভাবে কে প্রাইমারি Constraint রিমুভ করে । এক্ষেত্রে MySQL ও SQL Server / Oracle / MS Access SQL starement নিচে দিয়া হলো
MySQL ক্ষেত্রে query টি হবে নিন্মরূপ :
ALTER TABLE Persons
DROP PRIMARY KEY
আর SQL Server / Oracle / MS Access ক্ষেত্রে quraery টি হবে নিন্মরূপ :
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID