إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

طريقة تعريف الـ Foreign Key


4 رد (ردود) على هذا الموضوع

#1 حلمي أن في المعالي أمتي

حلمي أن في المعالي أمتي

    عضو

  • الأعضــاء
  • 8 مشاركة

تاريخ المشاركة 04 January 2007 - 03:20 AM

الرجاء من الأخوه مساعدتي في مشكله تواجهني وهي طريقة تعريف الـ foreign key كاملا
لاننه يطلع لي غلط
وانا كاتبته بهذا الشكل

foreign key (C_SSN) references Customer (SSN) on delete set null on update cascade

والاوراكل اللي عندي اوراكل 10g

انتظر الرد لأن التسليم يوم السبت

و جــــــــــــــــــــــزاكم الله خير :)

#2 smart angel

smart angel

    عضو

  • الأعضــاء
  • 21 مشاركة

تاريخ المشاركة 04 January 2007 - 10:39 AM

بسم الله الرحمن الرحيم


السلام عليكم
بعد التحية والأحترام
اليك المثال التالى للتوضيح وهو ايضا على اوركال 10

CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id

),

دا طبعا فى جدول الموضفين
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id),
والله ولى التوفيق
وفوق كل ذى علم عليم
محمد نور الدين
modyangel_1@hotmail.com
oracle developer 10g

#3 هانى سند

هانى سند

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 743 مشاركة

تاريخ المشاركة 04 January 2007 - 01:09 PM

السلام عليكم الأخ السائل
طريقة الأخ SMART ANGEL هي الصحيحة بالنسبة لتعريف الFOREIGN KEY
و لكن أحببت أن اضيف بعض الأشياء
فلا يوجد في تعريف الFOREIGN KEY CONSTRAINT جملة ON UPDATE CASCADE فقط ON DELETE
و المثال التالي يوضح لك
SQL> ALTER TABLE SCOTT.EMP ADD
  2  CONSTRAINT emp_dept_fk
  3   FOREIGN KEY (DEPTNO)
  4   REFERENCES SCOTT.DEPT (DEPTNO) ON DELETE SET NULL  ON UPDATE  CASCADE;
 REFERENCES SCOTT.DEPT (DEPTNO) ON DELETE SET NULL  ON UPDATE  CASCADE 
													*
يوجد خطأ عند سطر 4:
ORA-01735: اختيار ALTER TABLE غير صالح 


SQL> ALTER TABLE SCOTT.EMP ADD
  2  CONSTRAINT emp_dept_fk
  3   FOREIGN KEY (DEPTNO)
  4   REFERENCES SCOTT.DEPT (DEPTNO) ON DELETE  CASCADE;

تم تبديل جدول
و لكن فهمت من الأخ السائل انه يريد عند تعديل مثلا رقم الادارة DEPT NO ان يتم تعديل رقم الادارة في الموظفين ايضا
و يمكن تحقيق ذلك عن طريق التريجر الاتي
CREATE OR REPLACE TRIGGER UPDATE_DEPTNO
BEFORE UPDATE
OF DEPTNO
ON SCOTT.DEPT 
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
UPDATE EMP  
SET DEPTNO=:NEW.DEPTNO
WHERE  EMP.DEPTNO=:OLD.DEPTNO;  

   EXCEPTION
	 WHEN OTHERS THEN
	   RAISE;
END UPDATE_DEPTNO;
و ملحوظة أخيرة :اصدار قاعدة البيانات هو

Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
و لم أعمل علي قاعدة بيانات 10G من قبل و يرجي توضيح ممكن عمل عليها ان كان هذا الكلام اختلف فيها ام لا

ملحوظة أخري : تم تجربة ما سبق علي قاعدة البيانات 10 G و أعطي نفس النتيجة

بالتوفيق

تم التعديل بواسطة hanon_OCP, 05 January 2007 - 01:05 PM.


#4 حلمي أن في المعالي أمتي

حلمي أن في المعالي أمتي

    عضو

  • الأعضــاء
  • 8 مشاركة

تاريخ المشاركة 04 January 2007 - 09:31 PM

جزاكم الله خيرا

يعني وأنا اعمل انشاء للجدول مااكتب الـ FOREIGN KEY

يعني اول انشأ الجدول بعدين اعمل ALTER للجدول
كذا صحيح!!!

#5 هانى سند

هانى سند

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 743 مشاركة

تاريخ المشاركة 05 January 2007 - 12:42 AM

السلام عليكم
الأخ الكريم
يمكن استخدام اي من الطريقتين لانشاء الFOREIGN KEY
فيمكن إنشاء الجدول اولا ثم عمل ALTER للجدول و انشاء و اضافة الCONSTRAINTS
او إنشاء الجدول و انشاء الCONSTRAINT في نسف الوقت و بحملة واحدة ضمن جملة الCREATE TABLE هكذا
CREATE TABLE SCOTT.EMP_COPY
(
  EMPNO						  NUMBER(4,0)		   NOT NULL,
  ENAME						  VARCHAR2(10 BYTE)	 NULL,
  JOB							VARCHAR2(9 BYTE)	  NULL,
  MGR							NUMBER(4,0)		   NULL,
  HIREDATE					   DATE				  NULL,
  SAL							NUMBER(7,2)		   NULL,
  COMM						   NUMBER(7,2)		   NULL,
  DEPTNO						 NUMBER(2,0)		   NULL,
  CONSTRAINT EMP_DEPT_FK   FOREIGN KEY (DEPTNO)  REFERENCES DEPT(DEPTNO) ON DELETE SET NULL 
)
بالتوفيق