DATA DICTONARY – CONSTRAINT
টেবিল তৈরীর সময়ে ভুলক্রমে বা ইচ্ছাকৃত ভাবে CONSTRAINT ADD না করলে নিম্নলিখিত উপায়ে ADD, DROP, ENABLE / DISABLE করা যাবে। তবে এই কাজগুলি করতে গেলে কিনামে, কোন কলামে এবং কোন্ প্রকারের CONSTRAINT ব্যবহার করা হয়েছে তা জেনে নিতে হবে।
সাধারন ভাবে DESC COMMAND দিলে প্রয়োগ করলে আমরা টেবিলের গঠন দেখতে পারি। সেই সংগে NOT NULL CONSTRAINT থাকলে তাও দেখা যায়। কিন্তু অন্যান্য CONSTRAINT দেখা যায় না। অন্যান্য CONSTRAINT দেখতে চাইলে CONSTRAINT সংক্রান্ত ওরাকলের বিভিন্ন টেবিল থেকে দেখা যাবে। এগুলি ওরাকলের ডিফল্ট টেবিল। এই সকল টেবিল বিভিন্ন ইউজারের তৈরীকৃত CONSTRAINT জমা থাকে। সুতরাং CONSTRAINT নিয়ে কাজ করতে গেলে এই সকল টেবিল সম্পর্কে সম্যক ধারণা এবং টেবিল গুলি নিয়ে কাজ করার দরকার রয়েছে। কারণ এগুলি জানা না থাকলে CONSTRAINT মাছা যােেব না। নতুন CONSTRAINT তৈরী বা CONSTRAINT পরিবর্তনের জন্য অবশ্য বিস্তারিত জানতে হবে। নিচে CONSTRAINT সংক্রান্ত কয়েকটি টেবিলের নাম য়ো হলো এবং কিভাবে তা ব্যবহার হয়, তাও দেখানো হলো।
আর তা জানার জন্য নিচের মত করে কমান্ড দিতে হবে। নিচের ছকের বামপাশে রয়েছে মূলতঃ টেবিলের নাম। সুতরাং টেবিল দেখার জন্য আমরা কমান্ড দিতে পারি।
|
ALL_CONSTRAINTS |
All Constraint |
|
ALL_CONS_COLUMNS |
All Column Constraint |
|
USER_CONS_COLUMNS |
User Column Constraint |
|
USER_CONSTRAINTS |
User Constraint |
SQL> desc ALL_CONSTRAINTS;
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
CONSTRAINT_TYPE VARCHAR2(1)
TABLE_NAME NOT NULL VARCHAR2(30)
SEARCH_CONDITION LONG
R_OWNER VARCHAR2(30)
R_CONSTRAINT_NAME VARCHAR2(30)
DELETE_RULE VARCHAR2(9)
STATUS VARCHAR2(8)
DEFERRABLE VARCHAR2(14)
DEFERRED VARCHAR2(9)
VALIDATED VARCHAR2(13)
GENERATED VARCHAR2(14)
BAD VARCHAR2(3)
RELY VARCHAR2(4)
LAST_CHANGE DATE
INDEX_OWNER VARCHAR2(30)
INDEX_NAME VARCHAR2(30)
INVALID VARCHAR2(7)
VIEW_RELATED VARCHAR2(14)
SQL> desc ALL_CONS_COLUMNS;
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME VARCHAR2(4000)
POSITION NUMBER
SQL> desc USER_CONS_COLUMNS;
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME VARCHAR2(4000)
POSITION NUMBER
যেহেতু আমরা টেবিলর গঠন জানতে পারলাম সেহেতু এখন যে কোন কলামের ডাটা দেখা যাবে। কি কি নামে CONSTRAINTS আছে তা জানা আমাদের জন্য খুবই সহজ, কাজেই যে কােন ধরনের
CONSTRAINTS নিয়ে যেক কোন কাজনি করতে পারবো। নিচে কয়েকটি উদাহরন দেয়া যাক।
SYNTAX
SQL> SELECT CONSTRAINT_NAME, COLUMN_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME = 'product'
SQL>SELECT CONSTRAINT_NAME, COLUMN_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME='EMP'
CONSTRAINT_NAME COLUMN_NAME
---------------- -----------
FK_DEPTNO DEPTNO
PK_EMP EMPNO
SQL> SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE
FROM USER_CONSTRAINTS
WHERE TABLE_NAME='EMP';
CONSTRAINT_NAME C
------------------------------ -
PK_EMP P
FK_DEPTNO R
উপরের কমান্ড থেকে আমরা কি দেখতে পাই? বামপাশের কলামে কলামের নাম এবং ডান পাশে C, P, R ইত্যাদি। আসলে এগুলি হচ্ছে CONSTRAINTS কলাম টাইপ। কোন ধরনের CONSTRAINTS বা কোন টাইপের CONSTRAINTS তা জানতে নিচের ছকটি লক্ষ করি।
C = CHECK AND NOT NULL ALSO SAME
P = PRIMARY KEY
R = REFERENTIAL / FOREIGN KEY
U = UNIQUE
** কলাম CONSTRAINTS তৈরী করলে কোন নাম দেয়া হয় না কিন্তু ওরাকল একটি নিজস্ব নাম দিয়ে ডাটা ডিকশনারীতে সংরক্ষন করে থাকে। যা আমরা উপরোক্ত প্রক্রিয়ায় দেখতে পারি।