PDA

View Full Version : ایجاد ارتباط یک تیبل با خودش



shotshat
شنبه 10 آذر 1386, 10:59 صبح
یک تیبل حاوی ID-ParentID-Name دارم که یک چارت (tree) را در خود نگهداری می کند. می خواهم در قسمت Diagram در sql بین جدول با خودش ارتباط برقرار کنم بطوری که ID کلید اصلی و ParentId کلید خارجی باشد . به این دلیل که هر نود که حذف می شود اگر ID اش در قسمت ParentID دیگری باشد(ID حذف شده پدر نود دیگری بوده باشد) ، نود فرزند هم حذف شود(Cascade delete ) بطوری که نودی نماند که پدرش حذف شده باشد.
ولی در قسمت دیاگرام اجازه برقرار کردن این ارتباط را نمی دهد و ارور زیر را می دهد. چه کار باید بکنم؟



Chart' table
- Unable to create relationship 'FK_Chart_Chart'.
ODBC error: [Microsoft][ODBC SQL Server Driver][SQL Server]ALTER TABLE statement conflicted with COLUMN FOREIGN KEY SAME TABLE constraint 'FK_Chart_Chart'. The conflict occurred in database 'Personnel6', table 'Chart', column 'NodID

JAFO_IRAN
شنبه 10 آذر 1386, 17:41 عصر
سلام

متاسفانه cascade delete برای same table قابل استفاده نیست. تریگرهای عادی هم پس از حذف اجرا میشوند و نمیتوان مثلا در تریگر delete ابتدا فرزندان را پاک کرد. سه راه حل قابل تصور است:

1- از یک stored procedure برای حذف استفاده کنی که درآن قبل از حذف parent، فرزندان را حذف کنی
2- یک view بنویسی که دارای تریگر delete باشد. در آن تریگر ابتدا فرزندان را حذف کنی
3- یک تریگر حذف به صورت instead of روی همان جدول بنویسی

ارادت