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

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


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

Recommended Posts

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

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

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

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

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

رابط هذا التعليق
شارك

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


السلام عليكم
بعد التحية والأحترام
اليك المثال التالى للتوضيح وهو ايضا على اوركال 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),
والله ولى التوفيق
وفوق كل ذى علم عليم
محمد نور الدين
[email protected]
oracle developer 10g

رابط هذا التعليق
شارك

السلام عليكم الأخ السائل
طريقة الأخ 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
رابط هذا التعليق
شارك

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

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

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

رابط هذا التعليق
شارك

السلام عليكم
الأخ الكريم
يمكن استخدام اي من الطريقتين لانشاء ال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 
)


بالتوفيق

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية