PDA

View Full Version : چرا بين دو فيلد در دو جدول نميتوانم Relation برقرار كنم؟



hobab1987
دوشنبه 17 اسفند 1388, 15:20 عصر
با سلام
با SQL 2000.
دوفيلد از يك نوع اند( bigint) و يكيش هم كليد هستش.
(در ضمن در يكي از جدول ها دو كليد دارم كه تنها با يك كليد ميخوام Relation قرار دهم.)
مشكل از چيه؟ قبلا چنين اتفاقي نميوفتاد!

محمد سلیم آبادی
دوشنبه 17 اسفند 1388, 16:49 عصر
سلام،
بهتر بود پیغام خطایی که صادر میشه رو ارسال می کردین.
ولی حدس میزنم پیغام Conflict باید بده. چون نه Data type ها متفاوتند و نه اینکه جدول Parent کلید Unique نداره و...

اگر Conflict رخ میده به این معناست که قبلا داده هایی در جداول درج کردین که قید کلید خارجی رو زیر سوال میره. اگر داده ها اهمیتی نداره همه را Truncate کنید سپس برای ایجاد Relation تلاش کنید.

hobab1987
سه شنبه 18 اسفند 1388, 11:48 صبح
ببخشيد!
چنين پيغامي ميده!

http://upload.iranblog.com/6/1268179844.jpg


و اين دو تا جدول رو دارم: بين ID و ID_Person

http://upload.iranblog.com/6/1268193520.jpg
http://upload.iranblog.com/6/1268126558.jpg

ASKaffash
سه شنبه 18 اسفند 1388, 13:17 عصر
برای اینکه در جدول بالا ترکیب دو فیلد کلید است

hobab1987
سه شنبه 18 اسفند 1388, 15:05 عصر
خوب چه کار باید بکنم در جدول اول شماره شناسایی و شماره پرونده باید منحصر به فرد باشد.(جدول اول مربوط به دریافت کل اطلاعات شخص میباشد)

ASKaffash
سه شنبه 18 اسفند 1388, 15:11 عصر
سلام
خوب یک ایندکس دیگر روی شماره شناسائی و شماره پرونده ببندید که منحصر به فرد باشد و ربطی به کلید نداشته باشد (هرچند که این موضوع عجیب است)

محمد سلیم آبادی
سه شنبه 18 اسفند 1388, 18:39 عصر
خوب چه کار باید بکنم در جدول اول شماره شناسایی و شماره پرونده باید منحصر به فرد باشد.(جدول اول مربوط به دریافت کل اطلاعات شخص میباشد)

زمانی که برای جدول یک ستون ID در نظر گرفتین به این معناست که هر سطر جدول به وسیله ی مقدار این ستون (که احتمالا GUID یا Identity است) منحصر بفرد میشه.

حالا شما این ستون را با یک ستون دیگر به طور ترکیبی (Composite) کلید اصلی در نظر گرفتین. که ترکیب های بیشتری رو می تونید به عنوان کلید ذخیره کنید.

از طرفی من جمله ی شما این برداشت رو کردم که می خواهین مقدار ستون Dossier_Num در تمام سطرهای جدول منحصر باقی بمونه که چارش یک کلید unique است.

در کل چون کلید اصلی جدول ترکیبی است باید یک ستون دیگر به جدول دوم اضافه کنید و در قید کلید خارجی باید نام هر دو ستون را به عنوان reference در نظر بگیری که به اصطلاح به این نوع کلید خارجی های می گن Composite.

کدش اگر اشتباه نکم به این شکل میشه:

Alter table table_2
Add column Dossier_Num small int not null

alter table table_2 add constraint FK_2 foreing key (person_ID, Dossier_Num) references table_1 (ID, Dossier)Num) on delete no action