ورود

View Full Version : خطا در زمان برقراری ارتباط بین جداول



veniz2008
چهارشنبه 15 شهریور 1391, 12:42 عصر
سلام. من در برقراری ارتباط بین دو جدول به مشکل برخوردم. جدول هام کلا 3 تا هستن: 1. جدول نوع توصیه که کلید جدولم فیلد TypePointCode هست که از نوع identity هست. 2. جدول زیر نوع توصیه که فیلد SubTypePointCode کلید اصلی و identity هستش و TypePointCode هم کلید خارجی هستش. 3. جدول توصیه ها که فیلد PointCode کلید اصلی هستش . حالا زمانیکه میخوام کلیدهای خارجی رو برای جدول 3 تعیین کنم به خطا برمیخورم و اجازه کار رو نمیده. ( در واقع میخوام کلیدهای TypePointCode و SubTypePointCode از جدول2 رو به عنوان کلید خارجی جدول3 در نظر بگیرم). جواب این مشکل احتمالا در سوال زیر باشه : آیا کلید خارجی یک جدول، حتما باید در جدول مبدا، کلید اصلی باشه؟.
من عکسی از هر 3 جدول رو به همراه تصویری از خطا میزارم. پیشاپیش از راهنمایی دوستان تشکر میکنم.
جدول1:
92396

جدول 2:
92395

جدول 3:
92394
تصویر خطا :
92393http://barnamenevis.org/images/misc/pencil.png

m0hammad_01
چهارشنبه 15 شهریور 1391, 13:55 عصر
سلام
در تعریف کلید خارجی اومده که کلید اصلی جدولی، در جدول دیگه میاد.
با این کاری که کردین، حالت های رابطه موجودیت ها (1:1 و 1:n) رو نقض میکنه.چون جدول دومی نمیتونه حالت یکتا رو برای سطرهاش ایجاد کنه (همیشه).مدل رابطه ای فقط این دو حالت رابطه رو می پذیره.
نمیدونم میخواین چه چیزی رو بدست بیارین که اینطوری استفاده کردین از رابطه ها اما مطمئن باشین راه حل ساده تری وجود داره.

veniz2008
چهارشنبه 15 شهریور 1391, 15:49 عصر
هدف من از اینکه در جدول 2 کلید رو بصورت تکی گرفتم اینه که در وهله اول اولویت با کلید ساده هستش و بعد با کلید ترکیبی ( میتونستم فیلد SubTypePointCode رو identity نکنم و در عوض کلید رو ترکیبی بگیرم یعنی TypePointCode و SubTypePointCode رو به عنوان ابرکلید بگیرم). آیا راهی هست که جدول دوم تک کلید باقی بمونه ولی بتونم ارتباط بین جدول2 و جدول3 رو هم برقرار کنم؟

m0hammad_01
چهارشنبه 15 شهریور 1391, 16:22 عصر
شما اومدین بین جدول 1 و جدول 2 رابطه 1:n برقرار کردین.بعد اومدین بین جدول 2 و جدول 3 رابطه 1:n برقرار کردین.تا اینجا درست.حالا اومدین میخواین از طریق جدول 2،جدول 1 رو به جدول 3 وصل کنین.نمیدونم چرا این کار رو دارین انجام میدین! اگه میخواین جدول 1 و 3 رابطه داشته باشن که مستقیم میتونین.اگه هم کلید ترکیبی باید استفاده کنین تو جدول 2، اونوقت جواب کوئری هاتون رو میده؟
اگه مایلین در مورد این بخش از سیستمتون و جداول شرح بدین شاید بتونم کمک کنم.

veniz2008
چهارشنبه 15 شهریور 1391, 17:15 عصر
هدف اصلی من جلوگیری از ورود داده غیر مجاز هست. مثلا اگر در جدول1 کد نوع توصیه 100 موجود باشه در جدول2 کاربر برای این فیلد فقط مقدار 100 رو بتونه وارد کنه(تا اینجا درست کار میکنه). حالا فرض کنید در جدول2 برای فیلدهای TypePointCode و SubTypePointCode مقادیر 100 و 500 وارد شده باشن. میخوام در جدول3 برای فیلدهای متناظر فقط مقادیر 100 و 500 اجازه ورود داشته باشن. مثلا کاربر اجازه ورود داده 100 و 501 رو نداشته باشه.(در واقع کلید خارجی جدول3 همون کلید اصلی جدول 2 باشه). اگر کلید جدول2 رو ترکیبی بگیرم مشکلی نیست ولی اگه بخوام تک کلید بگیرم به مشکل برمیخورم. امیدوارم خوب توضیح داده باشم.

m0hammad_01
شنبه 18 شهریور 1391, 23:57 عصر
متوجه شدم که چیکار میخواین انجام بدین.اگه میشه یه سطح بالاتر برین و توضیح بدین که اصلا برای چی میخواین این کار (جلوگیری از ورود داده غیر مجاز) رو انجام بدین.شاید بشه ایده داد و اصلا طور دیگه ای جداول و رابطه ها رو طراحی کرد.چون اینطوری نمیشه با ذهن باز فکر کرد و نظر داد.البته اگه مایل به توضیح بیشتر هستین.

FastCode
یک شنبه 19 شهریور 1391, 00:25 صبح
چند ماه پیش یه مثال خوندم که شبیه مثال شما بود.
Rule
Set
RuleSet
SetRule
RuleSetRule
SetRuleSet
RuleSetRuleSet
.....

سوال من اینه که هدف این طراحی چی بوده؟