Sunday, May 1, 2011

تجريبببب

القيد UNIQUE:
القيد UNIQUE يتطلب بأن كل قيمة في العمود أو مجموعة الأعمدة تكون وحيدة أي أن ليس هناك سجلين يحويان قيم متكررة في عمود أو مجموعة من الأعمدة في الجدول.
العمود أو مجموعة من الأعمدة المتضمنة في تعريف القيد UNIQUE تدعى UNIQUE key.
إذا المفتاح UNIQUE يتضمن أكثر من عمود واحد فمجموعة الأعمدة تدعى a composite UNIQUE key
قيد المفتاح UNIQUE تسمح بإدخال قيم NULL ما لم يحدد القيد NOT NULL على نفس الأعمدة. في الحقيقة أي عدد من السجلات يمكن أن يتضمن قيم NULL للأعمدة بدون قيود NOT NULL لأن NULL لا تعتبر مساوية لأي شيء.
مثال:
CREATE TABLE  dept(
                      deptno         NUMBER(2),
                dname         VARCHAR2(14),
                loc               VARCHAR2(13),
                CONSTRAINT  dept_dname_uk  UNIQUE (dname));
القيود UNIQUE   تعرف على المستوى الجدول أو العمود. أما المفتاح UNIQUE المركب ينشأ على مستوى الجدول .
القيد PRIMARY KEY:
القيد PRIMARY KEY ينشأ المفتاح الأساسي للجدول, فقط مفتاح أساسي وحيد يمكن إنشائه لكل جدول.
القيدPRIMARY KEY  هو عمود أو مجموعة من الأعمدة التي تعرف بشكل وحيد كل سجل في الجدول
هذا القيد يجبر العمود أو تركيبة الأعمدة أن تكون وحيدة ويؤكد بأنه لا يوجد أي عمود يشكل جزء من المفتاح الأساسي يحتوي قيم NULL.
يمكن أن يعرف هذا القيد على مستوى العمود أو على مستوى الجدول. المفتاح الأساسي المركب ينشأ على تعريف مستوى الجدول.
مثال:
CREATE TABLE   dept(
                 deptno     NUMBER(2),
                 dname     VARCHAR2(14),
                  loc          VARCHAR2(13),
                  CONSTRAINT dept_dname_uk   UNIQUE (dname),
                  CONSTRAINT dept_deptno_pk   PRIMARY KEY (deptno));

يعرف هذا المثال قيد PRIMARY KEY على عمود deptno للجدول DEPT  اسم هذا القيد هو  dept_deptno_pk.

القيد FOREIGN KEY:
القيد المتكامل المرجعي أو المفتاح الغريب (الثانوي) يعين العمود أو مجموعة من الأعمدة كمفتاح ثانوي ويؤسس العلاقة بين المفتاح الأساسي أو المفتاح الفريد في نفس الجدول أو في جدول مختلف.
قيمة   FOREIGN KEY يجب أن تطابق قيمة موجودة في جدول الابن أو تكون NULL.
القيد FOREIGN KEY يعرف على مستوى العمود أو الجدول, المفتاح الثانوي المركب يجب أن يعرف باستخدام تعريف مستوى الجدول.
مثال:
CREATE TABLE  emp(
                   empno   number (4) ,
                   ename    varchar2(10)  NOT  NULL,
                   job         varchar2(9),
                   mgr        number(4),
                   hiredate  date,
                   sal          number(7,2),
                   comm.    number(7,2),
                   deptno    number(7,2) NOT  NULL,
                   CONSTRAINT emp_deptno_fk  FOREIGN KEY (deptno)
                                              REFERENCES  dept (deptno));

 يعرف هذا  المثال قيد FOREIGN KEY  على العمود DEPTNO  من الجدول EMP اسم القيد هو EMP_DEPTNO_FK.
المفتاح الثانوي يعرف في جدول الابن والجدول الذي يحتوي العمود المرجعي هو جدول الأب.
المفتاح الثانويFOREIGN KEY   يعرف باستخدام مجموعة من الكلمات المفتاحية التالية:
FOREIGN KEY    يعرف العمود في جدول الابن على مستوى الجدول.
REFERENCES     يحدد الجدول والعمود للجدول الأب.
ON DELETE CASCADE  يشير بأنه عندما يحذف سجل في جدول الأب فإن السجلات المعتمدة أو المرتبطة وفق هذا القيد في جدول الابن أيضاً ستحذف.
بدون الخيار  ON DELETE CASCADE لا يمكن حذف السجل في جدول الأب إذا ذكر في جدول الابن.

القيد CHECK :
يعرف هذا القيد شرط محدد يجب  أن يحققه كل سطر من الجدول . الشرط يستخدم نفس معاملات المقارنة المستخدمة في شروط عبارة SELECT .
  مثال :
........., deptno  NUMBER (2)
CONSTRAINT   emp-deptno _ck
CHECK (deptno BETWEEN 10 AND 99) ,.....

إضافة القيد إلى الجدول :
يمكن إضافة القيد إلى جداول موجودة باستخدام عبارة ALTER TABLE   مع عبارة ADD  كما في الشكل:
ALTER TABLE table
ADD [CONSTRAINT  constraint ]   type  (column);

حيث:
Table             اسم الجدول.
Constraint     اسم القيد.
Type              نوع القيد.
Column         اسم العمود المتأثر بالقيد.
اسم القيد هو اختياري  بالرغم من أنه يفضل تسميته. إذا لم تسمي قيودك النظام سيولد أسماء افتراضية.

مثال:
ALTER TABLE   emp
ADD  CONSTRAINT   emp_mgr_fk
                         FOREIGN KEY(mgr) REFERENCES  emp(empno)

هذا المثال ينشأ قيد FOREIGN KEY على جدول EMP , القيد يؤكد بأن المدير موجود كموظف فعلي في جدول EMP.

إرشادات:
يمكنك إضافة وحذف وتفعيل أو إلغاء تفعيل القيد. ولكن لا يمكن تعديل بنيته.
يمكنك إضافة القيد NOT NULL لعمود موجود باستخدام الجزء MODIFY  لعبارة  ALTER TABLE.
ملاحظة هامة:
يمكنك إنشاء قيد NOT NULL جديد فقط إذا كان الجدول لا يحتوي سجلات لأن المعطيات لا يمكن تحديدها لسجلات موجودة في نفس وقت إضافة العمود.

حذف القيد من الجدول :
لحذف قيد يمكنك معرفة اسمه من   
USER_CONSTRAINTS  and  USER_CONS_COLUMNS data dictionary views
ثم استخدم عبارة ALTER TABLE  مع عبارة DROP.
خيار CASCADE  لعبارة DROP   ستحذف أي قيود تابعة أيضاً.
ALTER TABLE table
DROP    PRIMARY  KEY |  UNIQUE (column)   |
               CONSTRAINT    constraint   [CASCADE];

حيث : table           اسم الجدول.
         Column      اسم العمود المتأثر بالقيد.
        Constraint   اسم القيد.

مثال:
حذف قيد المدير من جدول  emp.
ALTER  TABLE      emp
DROP  CONSTRAINT     emp_mgr_fk ;
مثال:
ALTER TABLE   dept
DROP PRIMARY KEY  CASCADE;

هذا المثال يحذف القيد  PRIMARY KEY على جدول  dept  ويحذف القيد FOREIGN KEY  المتشارك على عمود     emp.deptno .

إلغاء تفعيل القيد :
يمكنك إلغاء تفعيل القيد بدون حذفه أو إعادة إنشائه باستخدام عبارة ALTER TABLE مع الجزء DISABLE.
ALTER TABLE   emp
DISABLE   CONSTRAINT   constraint  [CASCADE];

حيث: table              اسم الجدول.
        Constraint     اسم القيد.

إرشادات:
يمكنك استخدام عبارة DISABLE في  عبارة CREATE   TABLE  و عبارة  ALTER TABLE.
عبارة CASCADE يلغي تفعيل القيود المتكاملة التابعة لغيرها.



مثال:
ALTER TABLE   emp
DISABLE   CONSTRAINT   emp_empno_pk   CASCADE;

تفعيل القيد :
يمكنك تفعيل القيد بدون حذفه أو إعادة إنشائه باستخدام عبارة ALTER TABLE   مع جزء ENABLE       
ALTER TABLE table
ENABLE  CONSTRAINT  constraint;

إرشادات:
إذا فعّل القيد عندها سيطبق هذا القيد على كل المعطيات في الجدول ,كل المعطيات في الجدول يجب أن توافق القيد.
يمكن استخدام عبارة  ENABLE في عبارة CREATE   TABLE   و عبارة ALTER TABLE.