PDA

View Full Version : loop in Relationship



مهدی هادیان2
سه شنبه 23 خرداد 1391, 21:23 عصر
بسم الله الرحمن الرحیم
با سلام
در مواقعی که رابطه ها لوپ می اندازند باید چی کار کرد؟
من 4 تا جدول به نام های کالا، فاکتور، جزئیات فاکتور و کاربر دارم.
جدول های کالا و کاربر با هم رابطه دارند. کدوم کاربر کالا رو ثبت کرده است.
جدول های کالا و جزئیات فاکتور هم با هم رابطه دارند و همچنین فاکتور و جزئیات فاکتور.
حالا اگر بخوام برای جدول های فاکتور و کاربر ریلیشن برقرار کنم؛ اجازه نمیده چون دور ایجاد می شود.
راه حل چیست؟
با تشکر

baktash.n81@gmail.com
چهارشنبه 24 خرداد 1391, 07:27 صبح
سلام

باید دوبار جدول کاربر رو تو join استفاده کنی ... یک بار کالا با کاربر ... یک بار هم فاکتور با کاربر ...

مهدی هادیان2
چهارشنبه 24 خرداد 1391, 10:50 صبح
سلام

باید دوبار جدول کاربر رو تو join استفاده کنی ... یک بار کالا با کاربر ... یک بار هم فاکتور با کاربر ...
با سلام
از پاسختون ممنون
من نمی خوام joinکنم می خوام بینشون relation برقرار کنم
لطفا یه بار دیگه تاپیک رو مطالعه بفرمائید.
با تشکر

baktash.n81@gmail.com
چهارشنبه 24 خرداد 1391, 11:40 صبح
یعنی شما می خوای می گی نمی تونی یک کلید اصلی (کد کاربر) را تو دوتا جدول (فاکتور و کالا) به صورت کلید خارجی تعریف کنی ؟؟؟

ممکنه مشکلتون رو بیشتر توضیح بدین ...؟؟؟ لوپ میندازه ؟؟ 88207

مهدی هادیان2
چهارشنبه 24 خرداد 1391, 11:55 صبح
با سلام
فکر می کنم شما Update رو Cascade نمی کنید
88208
خطایی هم که میده به شکل زیر می باشد

'user' table saved successfully
'kala' table saved successfully
'factor' table saved successfully
'factorDetail' table
- Unable to create relationship 'FK_factorDetail_factor'.
Introducing FOREIGN KEY constraint 'FK_factorDetail_factor' on table 'factorDetail' 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.

در ضمن متوجه نشدم چرا کد جزئیات فاکتور رو تو فاکتور گذاشتید. باید کد فاکتور در جزئیات فاکتور باشد.
با تشکر فراوان

baktash.n81@gmail.com
چهارشنبه 24 خرداد 1391, 12:52 عصر
شما از نظر منطقی نیازی به CasCade کردن User ها ندارید یعنی اگه یه User حذف بشه باید رکورد هایی هم که ثبت کرده پاک بشه ؟؟؟

فقط بین فاکتور و جزئیات فاکتور می تونید Cascade کنید ...

من کلید اصلی فاکتور رو تو جزئیات فاکتور گذاشتم ... اون فیلد FaktorDetail نشون دهنده اینه که فاکتور می تونه مشخصات دیگه ای هم داشته باشه ... کلید ها همشون با ID مشخص شدن

مهدی هادیان2
چهارشنبه 24 خرداد 1391, 13:17 عصر
شما از نظر منطقی نیازی به CasCade کردن User ها ندارید یعنی اگه یه User حذف بشه باید رکورد هایی هم که ثبت کرده پاک بشه ؟؟؟



برای Delete,No Action گذاشتم Update برای اینکه مثلا اگه آیدی کاربر تغییر کرد در کالا هم متناسب با اون تغییر کنه.

baktash.n81@gmail.com
چهارشنبه 24 خرداد 1391, 18:02 عصر
خوب از نظر منطقی کار شما درسته اما SQL این اجازه رو نمی ده ... یا بیخیال Cascade بشید یا طراحی تون رو عوض کنید ... البته این جواب رو خیلی از Site ها بود

از اونجایی که شما راحت می تونید تغییرات کد کاربری رو کنترل کنید ... ( یعنی کاملا مانع بشید که همچین اتفاقی بیفته ) بهتره Cascade کردن اون رو بیخیال بشید.

هرچند که برای پیاده سازی Cascade به صورت دستی می تونید روی اعمالی که در جداول انجام می دید از SP استفاده کنید

مهدی هادیان2
چهارشنبه 24 خرداد 1391, 22:21 عصر
خوب از نظر منطقی کار شما درسته اما SQL این اجازه رو نمی ده ... یا بیخیال Cascade بشید یا طراحی تون رو عوض کنید ... البته این جواب رو خیلی از Site ها بود

از اونجایی که شما راحت می تونید تغییرات کد کاربری رو کنترل کنید ... ( یعنی کاملا مانع بشید که همچین اتفاقی بیفته ) بهتره Cascade کردن اون رو بیخیال بشید.

هرچند که برای پیاده سازی Cascade به صورت دستی می تونید روی اعمالی که در جداول انجام می دید از SP استفاده کنید
با سلام
بابت پیگیریتون سپاسگزارم
فکر می کنم راه دیگه ای نباشه؛ باید هیمن کار رو بکنم
با تشکر