ورود

View Full Version : كمك درباره ايجاد كليد خارجي



sasansharifipour
شنبه 01 آبان 1389, 22:12 عصر
با سلام خدمت اساتید
من یک پایگاه داده دارم و می خواهم چند تا جدول رو با هم مرتبط کنم
ساختار جداول به این صورت هستند (البته خلاصه کردم به مقداری که مربوط به این بحث هست)
کد:
Table1 (name,ID)
Table2 (no, name, tb1ID , ID)
Table3 (no, name, type, tb2ID, ID)
Table4 (no, name, tb2ID, ID)
Tabl5 (tb4ID, tb3ID, type, ID)
در این جداول فیلد ID کلید هستند و فیلدهایی که با tb شروع شده اند کلید خارجی را مشخص می کنند و عدد بعد tb مشخص می کنه که مرجع فیلد کدام جدول است.
موقع ایجاد جدول 5 با مرتبط کردن فیلدای کلیدهای خارجی این پیام ظاهر می شه
مشکل از کجاست؟

کد:
Introducing FOREIGN KEY constraint 'FK_table5_tabe3' on table 'table5' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.
من هر طور که فکر کردم دیدم تمام فیلدهای جدول های 1 تا 4 ضروری هستند.
ممنون می شم اگر کسی بتونه منو راهنمایی کنه.

Rezahak
یک شنبه 02 آبان 1389, 10:09 صبح
سلام دوست عزيز
چون شما در جداول 3و 4 از ID موجود در جدول 2 استفاده كرده ايد و در جدول 5 از ID جداول 3و 4 به طور غير مستقيم ممكن است يك دور روي ID جدول 2 بوجود آيد.
اما راه حل:
يك راه ساده تركيب جداول 3و4 است البته اگر ممكن است (بنده چون اطلاع دقيقي از اطلاعات موجود در جداول شما ندارم نمي توانم در اين خصوص نظر قطعي بدهم) اگر ممكن است دقيقا بگوييد محتويات اين دو جدول چيست

sasansharifipour
یک شنبه 02 آبان 1389, 11:00 صبح
سلام

جدول 1 : جدول دانشكده : مثال : فيزيك ، 10 college : ID,Name

جدول 2 : نوع كلاس مربوط به دانشكده : مثال : آزمايشگاه فيزيك ، 1 ، 10 كه 10 كد دانشكده و 1 كد نوع كلاس مي باشد classType : collegeID,ID,Name كه collegeID,ID با هم كليد رو تشكيل مي دن و collegeID كليد خارجي از جدول college است

جدول 3 : نوع گروه آموزشي مربوط به دانشكده : مثال : گروه فيزيك ، 21 ، 10 كه 10 كد دانشكده و 21 كد روه آموزشي مي باشد Group : collegeID,ID,Name كه collegeID,ID با هم كليد رو تشكيل مي دن و collegeID كليد خارجي از جدول college است

جدول 4 : درس مربوط به گروه آموزشي : مثال : آزمايشگاه فيزيك 1465، 21 ، 10 ، 1 ، 10 كه در آن 1465 كد درس و 21 و 10 با هم گروه آموزشي رو مشخص ميكنه ( گروه فيزيك دانشكده فيزيك ) و 1 و 10 هم كلاس درس رو مشخص ميكنه ( آزمايشگاه فيزيك در دانشكده فيزيك)
course : collegeID,groupID,ID,Name,classCollege,classID كه collegeID,groupID از جدول Group كليد خارجي ان و classCollege,classID از جدول classType كليد خارجي ان
متشكر

Rezahak
یک شنبه 02 آبان 1389, 11:16 صبح
اولا كه در جدول 2و3 شما بايد تنها ID كليد اوليه باشد نه تركيب ID و collegeID
ثانيا collegeID را از جدول 4 كلا حذف كن چون به طور غير مستقيم در groupID و classID وجود دارد
ثالثا يك جدول جا افتاده!!!!! جدول پنجم كو؟؟؟؟

sasansharifipour
یک شنبه 02 آبان 1389, 11:32 صبح
من سعي كردم خلاصه كنم چون اگه اين مشكل حل بشه خود به خود براي 5 تا هم حل ميشه براي همين جدول 5ام رو حذف كردم و از جدول classType استفاده كردم
من ميام ID‌رو در جدول 2 به اين صورت ميذارم 1-10 حالا collegeID رو براي كليد خارجي نياز دارم ولي كليد فقط ID و در جدول 3 هم به همين صورت درسته؟؟

sasansharifipour
یک شنبه 02 آبان 1389, 11:39 صبح
من اين روشي كه فكر ميكردم شما ميگيد رو امتحان كردم جواب نميده
دوباره ميگه حلقه داره

Rezahak
یک شنبه 02 آبان 1389, 11:41 صبح
باز هم تكرار مي كنم توي پست اول شما پنج تا جدول گذاشتيد ولي توي اون پستي كه ريز جداول رو گفتيد چهار تا هستند اون جدول جا افتاده چيست؟؟

sasansharifipour
یک شنبه 02 آبان 1389, 11:48 صبح
عزيزم جدول حذف شده جدول نوع واحده يعني من هر درس رو به چند تكه مجزا ميشكنم و هر واحدش در يك نوع كلاس خاص برگزار ميشه مثلاً درس هايي كه واحد تئوري و عملي دارن.
واحد تئوري در يك نوع كلاس برگزار ميشه و واحد عملي در يك نوعكلاس ديگه برگزار ميشه.
اون مشكلي نيست شما ببينيد كجاي كارم مشكل داشته كه حلقه ايجاد ميشه
متشكرم

Rezahak
یک شنبه 02 آبان 1389, 11:59 صبح
اگر جداول مهم همين ها هستند تنها ايراد استفاده هاي مكرر از CollegeID هستند
اما يك نكته ديگر اون فيلد Classcollege در جدول آخر هست!!! آيا اين فيلد كليد خارجي است؟؟

sasansharifipour
یک شنبه 02 آبان 1389, 12:02 عصر
با چيزي كه شما فرموديد اين classCollege حذف ميشه و از كليد جدول class‌ قابل دسترسيه
حالا براي حل مشكل بايد چكار كنم راهي مد نظر داريد؟؟؟؟
متشكر

Rezahak
یک شنبه 02 آبان 1389, 12:06 عصر
اگر ClassCollegeرا حذف كنيد ديگه دوري نمي مونه يك با ديگر جداول را مرور مي كنيم::
college:ID,Name,...
Class : ID,CollegeID, Name,...
Group:ID,CollegeID,Name,...
GroupsClasses:ID,GroupID,ClassID,...

Rezahak
یک شنبه 02 آبان 1389, 12:11 عصر
البته بهتر است كلاسها را مستقل از دانشكده و گروه تعريف كنيد و در يك جدول ديگر ارتباط كلاس را با گروه مربوطه برقرار كنيد كه به تبع آن ارتباط با دانشكده نيز برقرار مي شود:
Class : ID, Name,...
Group:ID,CollegeID,Name,...
GroupsClasses:ID,GroupID,ClassID,...

sasansharifipour
یک شنبه 02 آبان 1389, 12:14 عصر
دور مي مونه
اگه شما در جدول class فيلد collegeID رو از جدول college كليد خارجي بگيريد و در جدول group هم فيلد collegeID رو از جدول college كليد خارجي بگيريد و در جدول groupClasses فيلد GroupID رو جدول Group و فيلد ClassID رو از جدول Class كليد خارجي بگيرم دوباره ارور ميده.
چند پست قبل من اين كار رو انجام دادم و گفتم ارور ميده نگاه كنيد.
متشكر

sasansharifipour
یک شنبه 02 آبان 1389, 12:18 عصر
من نمي تونم كلاس رو مستقل از دانشكده تعريف كنم آخه نوع كلاس مربوط به دانشكده است و نميشه دانشكده اش مشخص نباشه از اول بايد دانشكده مشخص باشه

Rezahak
یک شنبه 02 آبان 1389, 12:19 عصر
ببينم در پست آخرم كلاس را غير وابسته به دانشكده تعريف كرده ام آيا اين درست تر نيست؟
اصل كلاس يا همان واحد درسي ربطي به دانشكده يا گروه ندارد مثلا آزمايشگاه فيزيك هميشه آزمايشگاه فيزيك است ولي وقتي بخواهيم كلاسي متناظر با آن در يك گروه آموزشي تشكيل دهيم بايد آنرا به گروه و دانشكده وصل كنيم يعني در جدول GroupsClasses.
اين طوري مشكل دور هم حل مي شود

Rezahak
یک شنبه 02 آبان 1389, 12:22 عصر
ببين عزيزم اون چيزي كه شما به عنوان كلاس مد نظر داريد در اصل واحد درسي است مثل واحدهاي عمومي مثلا معارف كه در تمام دانشكده ها كلاسهاي آن وجود دارد ولي اصل آن يكي است
يك مقدار روي صورت مسئله بيشتر فكر كن هميشه يك طراح خوب بايد تحليل گر خوبي باشد

sasansharifipour
یک شنبه 02 آبان 1389, 12:29 عصر
چيزي كه شما مي فرمائيد درست مي باشد ولي چند تا مشكل

1- من براي اينكه مشخص كنم يك دانشكده چه كلاسهايي دارد نياز به يك جدول واسط دارم كه كد كلاس و كد دانشكده در آن باشد؟؟؟؟

2- درسي كه در يك دانشكده تدريس مي شود بايد در يك نوع كلاسي خاص آن دانشكده تدريس شود كه در اين صورت بايد در جدول آخر كد كلاس از جدول واسط مشخص شود كه باز دور ايجاد مي شود.(قبلاً امتحان كرده ام)

آيا شما راه ديگري مي شناسيد؟
شرمنده

Rezahak
یک شنبه 02 آبان 1389, 13:01 عصر
شما خودتون مي گوييد كلاسهاي دانشكده ، پس گروه در اينجا معني ندارد. در خقيقت شما بايد يك جدول داشته باشيد كه بين واحد درسي و دانشكده ارتباط برقرار كند و اسمش مي شود كلاسهايي كه در يك دانشكده وجود دارد وفيلد هاي آن شامل شماره دانشكده ، شماره واحد درسي ، شماره كلاس ، نام استاد و .... و در آخر گروه آموزشي مي باشد