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

مشكلة (many to many)


Essam

Recommended Posts

في البداية احب ان اهنى الجميع بهذا الحس العالي بالمسؤولية..
المشكلة كالتالي:
الموظف يمكن ان يتكلم اكثر من واللغة يمكن ان يتحدث بها اكثر من موظف
(many to many)....
اي لدينا جدول للموظفين وليكن التالي:

create table info(id number(5),
lang_id number(1),
constraint info_id_pk primary key(id));



و جدول اللغات كالتالي:

create table lang(lang_id number(1),
                 language varchar2(15),
constraint lang_lang_id_pk primary key (lang_id));


لسؤال هو كالتالي :
كيف يتم حل هذه المشكلة على صعيد ال SQL؟
كيف يتم حل هذه المشكلة على صعيد ال FORM؟
لقد قمت بانشاء جدول ثالث لفك العلاقة كالتالي:

create table int(id number(5),
                lang_id number(1),
constraint int_lang_id_fk foreign key(lang_id) references 
lang(lang_id));



فهل هذا صحيح؟
و هل يجب اضافة TRIGGERS؟
وما هو الITEM التي سنستخدمها في ال FORM لاظهار حقل اللغات؟
و شكرا للجميع...

تم تعديل بواسطة Oracle
رابط هذا التعليق
شارك

اخي عصام في حال ان تكون معك meny to meny اكيد انته تحتاج الى جدول ثالث وسيط .

جدول الموظفين :

create table emp(emp_id number(5),
emp_name varchar2(20),
constraint info_id_pk primary key(emp_id)); 



جدول اللغات:

create table lang(lang_id number(1),
language varchar2(15),
constraint lang_lang_id_pk primary key (lang_id)); 



الان الجدول الوسيط :

create table emp_lang
(
emp_id number(5)  constraint fk_emp_lang_emp_id references emp(emp_id)
,lang_id number(1) constraint fk_emp_lang_lang_id references  lang(lang_id)
,constraint pk_emp_lang_emp_id_lang_id primary key (emp_id,lang_id)
); 


في الجدول الوسيط يمكنك ان تحدد العلاقة بين الجدولين , وفي جدول الوسيط سوف يكون معك فقط ارقام اي رقم الموظف وارقام اللغات التي يجيدها .
وفي الفورم ربما لا تحتاج ان تظهر الاسما مع الارقام , وهنا تحتاج لعمل 2 functions واحدة لارجاع الاسم واخرى لارجاع اللغة , ثم قم بعمل 2 display items وحد لعرض الاسم واخر لعرض اللغة .

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

شكرا جزيلا للمشاركين..
اتصور ان المشكلة على المستوى التصميمي(sql) قد تم حلها ,الا ان

المعضلة تكمن في التطبيق(forms),أي:
لدينا اسم الموظف ولبكن ( x ومن نوع item text)
و اسماء اللغات و لتكن (من نوع list item مثلا سيتم توليدها من جدول lang)
فكيف سنتعامل مع حقل اللغات في حال اردنا اختيار(ادخال) لغتين للموظف x
وايضا في حالة الاظهار(الاستعلام)...

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

في الفورم اعمل بلك للجدول الوسيط وليكن tabular style
لربط الموظف رقم 1 باكثر من لغة
ادخل في السجل الاول رقم الموظف 1 ثم اللغة
وفي السجل الثاني ايضاً رقم 1 ثم لغة اخرى
وهكذا

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

اعتذر عن التاخير,لانشغالي الكبير,هنا form بسيط يوضح الحل , و ذلك اعتمادا على كود الاخ خالد مع تعديل بسيط, كالتالي:

create table emp1(emp_id number(5),
emp_name varchar2(20),
constraint info_id_pk primary key(emp_id));



جدول اللغات:


create table lang(lang_id number(1),
language varchar2(15),
constraint lang_lang_id_pk primary key (lang_id));



الان الجدول الوسيط :


create table emp_lang
(
emp_id number(5)  constraint fk_emp_lang_emp_id references emp1(emp_id)
,lang_id number(1) constraint fk_emp_lang_lang_id references  lang(lang_id)
,constraint pk_emp_lang_emp_id_lang_id primary key (emp_id,lang_id)
);




insert into lang values(1,'الروسية');
insert into lang values(2,'الانجليزية');
insert into lang values(3,'الالمانية');
insert into lang values(4,'الرومانية');
insert into lang values(5,'التشيكية');
insert into lang values(6,'الفرنسية');
insert into lang values(7,'الهندية');
commit;

;
و الفورم:

lang.zip

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

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

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

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

×   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.

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

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

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