ورود

View Full Version : relation یک جدول با خودش



حمیدرضاصادقیان
یک شنبه 23 دی 1386, 11:25 صبح
سلام دوستان.من یک جدول سند دارم که به عنوان fk برای جداول فروش و خریدو خزانه داری حساب میشه.حالا اگر بخوام در خود این جدول جداگانه سند بزنم باید چکار کنم؟ایا میشه این جدول با خودش relation برقرار کنه.؟چون در حال حاضر وقتی که سندی در این جدول اضافه میشه چون در جدولهای دیگر نیست پیغام خطا میده.

e-shahshahani
یک شنبه 23 دی 1386, 12:25 عصر
اگه بیشتر توضیح بدی و تصویر دیگرام دیتا بیس را بگذاری ببینیم شاید بتونیم کمک کنیم.

Alireza Orumand
یک شنبه 23 دی 1386, 14:17 عصر
سلام
بله امکان داره که به یک جدول به خودش ریلیشن داشته باشه. برای نمونه میشه به جدول EMPLOYEES تو دیتابیس NORTHWIND اشاره کرد که هر کارمند با یه کارمند دیگه به عنوان رییس ارتباط داره و همون رییس به عنوان یه کارمند هم داخل جدول ثبت شده.
اگر مشکلی با ایجاد داشتید بفرمایید من نمونه کد بگذارم. الان سرور دم دستم نیست که کد بگذارم.
موفق باشید.

حمیدرضاصادقیان
یک شنبه 23 دی 1386, 16:51 عصر
اگر اینکارو بکنید ممنون میشم.اخه از داخل خود EM نتونستم.میدونستم اینکار شدنی هست ولی تلاشم نتیجه ای نداد.

حمیدرضاصادقیان
سه شنبه 09 بهمن 1386, 15:50 عصر
دوستان کسی نیست در این مورد راهنمایی کنه؟

حمیدرضاصادقیان
سه شنبه 09 بهمن 1386, 16:21 عصر
من جدول northwind رو نگاه کردم.در جدول employees هر سه relation که ایجاد کرده جدول اصلی خود employee هست.ولی جداول من به این صورته که من میخوام طرف وقتی فاکتور فروش رو حذف کرد سندش حذف بشه که با ایجاد relation اینکارو کردم.حالا نیاز دارم خود جدول سند نیز بتونه جداگانه سند بزنه.یعنی یک بار جدول سند من به عنوان foreign key هست ولی در اینجا باید به خودش relation داشته باشه.

mahdi_farhani
سه شنبه 09 بهمن 1386, 17:47 عصر
دو راه من میتونم بت پیشنهاد کنم :
راه اول اینه که به وسیله کد نویسی این ارتباط و حذف کنی و Relation ها را بدون ایجاد Relation برقرار کنی ( امیدوارم منظورمو فهمیدی باشی )
راه دوم اینه که از دو فیلد مجزا استفاده کنی . که یکی با جدول فروش در ارتباط باشه و دومی با جدول سند . حالا اگر فیلد جدول فروش پر شد ، پس فیلد دومی Null میشه و همچنین بلعکس.
این نظر منه ، شاید راه اصولیتر و بهتری هم وجود داشته باشه .

Microsoft.net
سه شنبه 09 بهمن 1386, 19:44 عصر
اگه جدول سندت رو Master Detail کنی مشکلت حل میشه ! تو master شماره سند و نوع سند و تاریخ سند و تو detail ردیف های سند توش میخورن . بعدشم شما توی FK هایی که از فروش و خرید و خزانه میاد فقط باید Null ذخیره کنی هرچیزه دیگه خطا بر میگردونه .

حمیدرضاصادقیان
سه شنبه 09 بهمن 1386, 19:52 عصر
اخه الان یک مقداری تغییر ساختار برام سخته.چون 400 مشتری دارم و هرکدوم کلی دیتا دارند.
اخه یکی از دوستان گفته بود که امکانش هست این relation رو ایجاد کرد.فقط روشش رو متوجه نشدم.باز اگر بشه یک فیلد به جدول اضافه بشه خیلی راحتتر میشه اینکارو کرد که کلا بخوام ساختار جدول رو تغییر بدم.

JAFO_IRAN
سه شنبه 09 بهمن 1386, 21:43 عصر
سلام

با خود relation که مشکلی ندارید، درسته؟ میشه مثل هر ارتباط دیگری، self-rel هم درست کرد. اشکال اینه که cascade delete انجام نمیشه...
در اینجور موارد میشه یک روتین برای delete بنویسید که اول fkها رو پاک کنه و بعد pk رو پاک کنه - یا میشه یک view بنویسی و براش instead of delete trigger بنویسی که همون منطق رو اعمال کنه - یک احتمال دیگر هم هست که من مشکل رو درست نفهمیده باشم :P

ارادت

حمیدرضاصادقیان
سه شنبه 09 بهمن 1386, 22:29 عصر
سلام.خوب من نیازی ندارم که cascade delete باشه.چون وقتی که کاربر سند رو پاک میکنه دیگه نیازی نیست جایی تستی انجام بشه .یعنی به جایی لینکی نداره .خودش هست و خودش. فقط مشکل من الان اینه که این جدول سند من برای جدول فروش من به عنوان fk هست و وقتی من میخوام جداگانه در این جدول اطلاعات وارد کنم میگه این شماره سند در جدول فروش وجود نداره.
الان مشکل من اینه.
امیدوارم منظورمو درست رسونده باشم.
با تشکر.

حمیدرضاصادقیان
پنج شنبه 11 بهمن 1386, 14:34 عصر
دوستان کسی نیست در این زمینه راهنمایی کنه؟

Microsoft.net
پنج شنبه 11 بهمن 1386, 17:44 عصر
دوستان کسی نیست در این زمینه راهنمایی کنه؟

همون طور که گفتم ساختار برنامتو بد design کردی . بهترین راه به نظر من اصلاح ساختار و convert اطلاعات قدیم به جدید هست . با این ساختاری که داری هر جور عمل کنی بازم یه جای کار میلنگه

mahdi_farhani
جمعه 12 بهمن 1386, 15:03 عصر
به نظر من که از همون روشی که من بت گفتم استفاده کن ، مشکلی با cascade هم پیدا نمیکنی ......


1-snd_ID int ----------- Pk
2-Forsh_ID int ------------fk to Table Frosh
3-snd_Parent int ----------- fk to this table
.
.
.

اگر توضیح بیشتری خواستی بگو تا بدم.

حمیدرضاصادقیان
جمعه 12 بهمن 1386, 19:58 عصر
سلام.با تشکر از همه دوستان.من میخواستم این کارو بدون استفاده از Trigger حل کنم.ولی چون راهی فعلا پیدا نکردم و برای راههای شما نیاز به تغییر ساختار است و من نمیخواهم این کارو انجام بدم ، فعلا از Trigger استفاده کردم و مشکل حل شد.