PDA

View Full Version : مشکل در ایجاد رابطه آبشاری یک دیتابیس پیچیده



HosseinSaberi
پنج شنبه 25 اردیبهشت 1393, 12:48 عصر
با عرض سلام خدمت دوستان محترم
من یه دیتابیس ایجاد کردم که خیلی پیچیده است(از نظر خودم) علت اصلی پیچیدگیش هم استفاده از کلیدهای چندگانه ست که خیلی ها بهش اعتقادی ندارند اما من مجبور شدم ازش استفاده کنم. طراحی بانک تقریباً تمومه و فقط یک نکته مونده و اونم ایجاد رابطه بصورت آبشاریه (Cascade). چون من میخوام وقتی کاربر فیلد کلید در جدول اصلی رو تغییر داد فیلدهای مربوطه در جداول فرعی هم خود بخود عوض بشه. چند تا از ارتباطها رو تونستم بصورت آبشاری در بیارم اما بقیه نشد. خطایی که میده به نظر من غیر منطقیه اما علت تا اونجایی که من فهمیدم اینه که بعضی از کلید های خارجی ممکنه چند با آپدیت بشن.
من برای اینکه اولاً دوستان راحت تر مسئله رو متوجه بشن و ثانیاً بتونن روی مشکل اصلی فوکوس کنند و ثالثاً برای حفظ اسرار کاری اون قسمت از جدول رو که باهاش مشکل داشتم رو جدا کردم و هم اسکریپتش رو گذاشتم (برای نصب در sql) و هم تصویرش رو. توی فایل اسکریپتی که من گذاشتم تا اونجایی که میشده روابط رو آبشاری کردم اما دیگه امکانش نیست.

119065

شرح ریز مشکل
اصل مشکل اینه که از بین ارتباطهای زیر فقط میتونه یکیشون Cascade بشه
FK_A_L0
FK_A_L1
FK_A_L2
FK_A_L21
FK_A_L22
FK_A_L23

مشکل هم فکر میکنم بخاطر اینه که وقتی L0 رو تغییر میدیم با رابطه آبشاری که وجود داره خود بخود L1 هم تغییر میکنه و به تبع اون L2 ,L21,L22,L23 اما همه اینها همزمان میخوان جدول A رو هم تغییر بدند که دچار مشکل میشه. یعنی اگر یکی شون جدول A رو تغییر بده مشکلی نیست اما همه با هم نمیتونن آبشاری باشند.
واقعاً ممنون میشم اگر کسی بتونه مشکل منو حل کنه
امتحان کن که بسی گنج مرادت بدهند
گر خرابی چو مرا لطف تو آباد کند (حافظ)

SayeyeZohor
سه شنبه 06 خرداد 1393, 16:17 عصر
i hope this Diagram is helpful to you


119559

Tanx

HosseinSaberi
سه شنبه 06 خرداد 1393, 18:25 عصر
دوست عزیز شما واقعاً زحمت کشیدی ولی این طرح شما یه مشکلی داره و اونم اینه که ممکنه جداول L1 , L2,.... اصلاً رکوردی نداشته باشند. بنابر این زنجیره ای که شما درست کردی وسط راه ارتباطش قطع میشه و با تغییر L0 ممکنه جدول A تغییر نکنه
اما باز هم از اینکه وقت گذاشتید ممنونم

SayeyeZohor
پنج شنبه 08 خرداد 1393, 21:36 عصر
با سلام

فک کنم تا حالا تنها راه اینه که ارتباطات رو به همون صورت اولیه تعریف کنین و تو هر کدوم از جداول L0 تا L23 یه Trigger بنویسین که به محض آپدیت فیلدهاشون ، فیلدهای A رو هم آپدیت کنند


:عصبانی++::متفکر: