PDA

View Full Version : عدم برقراری relationship



resident
سه شنبه 16 بهمن 1386, 19:32 عصر
سلام.
گاهی اوقات وقتی میخوام relationship ها رو از طریق manage relationship مشخص کنم، error زیر رو میده و اون رابطه رو برقرار نمی کنه. چرا این مشکل بوجود میاد و چطور میتونم اونو رفع کنم؟

'shablon' table saved successfully
'vasileye_emale_loab_size' table
- Unable to create relationship 'FK_vasileye_emale_loab_size_shablon'.
ODBC error: [Microsoft][ODBC SQL Server Driver][SQL Server]Introducing FOREIGN KEY constraint 'FK_vasileye_emale_loab_size_shablon' on table 'vasileye_emale_loab_size' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
[Microsoft][ODBC SQL Server Driver][SQL Server]Could not create constraint. See previous errors.


سپاسگزارم.

resident
چهارشنبه 17 بهمن 1386, 06:40 صبح
از اساتید عزیز کسی کمک نمی کنه؟

حمیدرضاصادقیان
چهارشنبه 17 بهمن 1386, 08:54 صبح
سلام .پیغام خطا دقیقا مشخصه.ببینید شما دوتا کلید دارید .یک بار همون کلید با جدول مربوطه ات به عنوان master-detail تعریف شده یک بار هم برعکس تعریف شده.یعنی کلید در این جدولت یک بار کلید خارجی هست یک بار کلید اصلی. به خاطر همین بهت این پیغام خطا رو میده.یک حالت چرخشی در ایجاد relation اتفاق خواهد افتاد که sqll به شما اجازه نمی ده.
موفق باشی.

resident
چهارشنبه 17 بهمن 1386, 09:11 صبح
سلام .پیغام خطا دقیقا مشخصه.ببینید شما دوتا کلید دارید .یک بار همون کلید با جدول مربوطه ات به عنوان master-detail تعریف شده یک بار هم برعکس تعریف شده.یعنی کلید در این جدولت یک بار کلید خارجی هست یک بار کلید اصلی. به خاطر همین بهت این پیغام خطا رو میده.یک حالت چرخشی در ایجاد relation اتفاق خواهد افتاد که sqll به شما اجازه نمی ده.
موفق باشی.
جناب صادقیان ، من چک کردم، مشکل از cycleنبود.
اینطور که شما می فرمایید یعنی کلاس با خودش رابطه داره که یکبار به عنوان کلید اصلی و یکبار به عنوان کلید خارجی در جدول ظاهر میشه؟!!!
میدونید چه مواقعی این error رو میده؟
گاهی اوقات که چند تا کلیدخارجی تو یک جدول دارم ، وقتی رابطه اولین کلید خارجی رو برقرار کردم ، برای بقیه همین ارر رو میده و نمی تونم برای بقیه کلیدهای خارجی relationship تعریف کنم.

حمیدرضاصادقیان
چهارشنبه 17 بهمن 1386, 09:44 صبح
خوب شاید همون کلید های که دارید یک کلید رو دوبار میخواهید تعریف کنید که این پیغام رو میده.
بعد اگه اشتباه نکنم شما فقط میتونی برای کلید خارجی یک لینک برقرار کنی.چون یک فرزند فقط میتونه یک پدر داشته باشه.اگه قرار باشه برای کلید خارجی چند کلید اصلی باشد مشکل خواهد شد.(البته به نظر من)

resident
چهارشنبه 17 بهمن 1386, 09:50 صبح
خوب شاید همون کلید های که دارید یک کلید رو دوبار میخواهید تعریف کنید که این پیغام رو میده.
از این بابت مطمئنم که این کار رو نکردم.


بعد اگه اشتباه نکنم شما فقط میتونی برای کلید خارجی یک لینک برقرار کنی.چون یک فرزند فقط میتونه یک پدر داشته باشه.اگه قرار باشه برای کلید خارجی چند کلید اصلی باشد مشکل خواهد شد.(البته به نظر من)
منظورتون از این جمله چیه؟

حمیدرضاصادقیان
چهارشنبه 17 بهمن 1386, 10:45 صبح
ببینید کلید خارجی رو شما وقتی تعریف میکنی یعنی اینکه این کلید خارجی به معنی یک بچه حساب میشه و کلید اصلی به عنوان یک پدر حساب میشه.وقتی که شما رکوردی که کلید اصلی هست رو پاک میکنی تمامی زیر مجموعه هاش پاک میشه یا بروز میشه.
ولی به نظر شما درسته یک بچه چند پدر داشته باشه؟یعنی وقتی یک کلید خارجی پاک میشه باید کل بچه هایی که زیر مجموعه اون پدر هستند از بین بروند و خود پدر هم از بین برود؟!!!!!!
امیدوارم منظورمو درست بیان کرده باشم

resident
چهارشنبه 17 بهمن 1386, 11:22 صبح
این بار امیدوارم من منظور شما درست فهمیده باشم.
اینطور که من متوجه شدم منظور شما اینه که برای یک کلیدخارجی نمی شه چند ارتباط درنظر گرفت و هرکلید خارجی فقط با پدر خودش می تونه رابطه داشته باشه.
خوب بله.بنده هم اینو قبول دارم. اصلا اگه بخواهیم برای یک فرزند چند پدر تعریف کنیم خود اس کیو ال کلی ارر از نوع فیلد ها و... می گیره و اجازه همچین کاری رو نمیده.
به هر حال بنده این کار رو نکردم. علت ارر از چیز دیگه نمیتونه باشه؟

writeshirin
چهارشنبه 17 بهمن 1386, 13:37 عصر
اونجوری که خود error گفته در جدوالتون Cycle به وجود اومده ،
شما احتمالاً تعیین کرده اید که با حذف و update پدر ، فرزندان هم حذف و update شوند ( یعنی گزینه Cascade)
در قسمت Insert and update specification :
برای آپدیت و حذف گزینه دیگه ای رو انتخاب کنید ، توی خود ارورتون گفته No action رو انتخاب کنید .
امتحان کنید ببینید مشکل برطرف میشه یا نه . :لبخندساده:

resident
چهارشنبه 17 بهمن 1386, 18:39 عصر
آقای صادقیان ممنون، حل شد ولی اینکه cascade رو تیک نزنیم خیلی بده. حالا باید برای عمل cascade خودم دستی کد بنویسم؟
چرا اینطور میشه؟ با بودن cascade چه اتفاقی می افته که وقتی تیکشو بر میداریم درست میشه؟

حمیدرضاصادقیان
چهارشنبه 17 بهمن 1386, 21:05 عصر
سلام دوست عزیز.توی Cascade سیستم چک میکنه که اگر کلید اصلی تغییر کرد زیر مجموعه های آن نیز تغییر کند و اگر کلید اصلی حذف شد تمامی زیر مجموعه های آن حذف می شود. علتش هم اینست که شما یک کلیدی داری که دوبار به صورت چرخشی ایجاد شده که وقتی Cascade رو انتخاب میکنی امکان ایجادش نیست.
شما اگه برات امکان داره ساختار جدولت رو عکس بگیری.(هر دو جدول) بعد کلید هایی که ایجاد کردی رو بنویسی خیلی قشنگتر میشه کمکت کرد.