ورود

View Full Version : مشکل در ساخت جدول و استفاده از چند کلید خارجی.



hdv212
یک شنبه 17 تیر 1386, 20:32 عصر
سلا م و خسته نباشید.
من یه جدول میخوام بسازم، به نام tbl_address که توش چند تا فیلد هست که رفرنس میزنه به جداول دیگه، حالا توی همه ی این فیلدها میخوام از on delete set null و on update cascade استفاده کنم، ولی sql server به من پیغام خطای زیر رو میده :

Msg 1785, Level 16, State 0, Line 1
Introducing FOREIGN KEY constraint 'FK__tbl_addre__areaI__1B0907CE' on table 'tbl_address' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.

اینم کد ساخت جدولم :


create table tbl_address(
addressID int primary key,
cityID int references tbl_city(cityID) on delete set null on update cascade,
areaID int references tbl_area(areaID) on delete set null on update cascade,
streetID int references tbl_street(streetID) on delete set null on update cascade,
addressDetais nvarchar(max))

به نظر شما چطوری مشکلمو حل کنم ؟
مرسی

AminSobati
یک شنبه 17 تیر 1386, 23:15 عصر
حامد جان زمانی که یک PK دو بار بعنوان FK در جدول دیگه شرکت کنه، نمیتونین Cascade کنین. در چنین حالتی شما FK نمیسازید، و Referential Integrity رو بوسیله Trigger اعمال میکنید

hdv212
دوشنبه 18 تیر 1386, 00:03 صبح
زمانی که یک PK دو بار بعنوان FK در جدول دیگه شرکت کنه، نمیتونین Cascade کنین.

آقای ثباتی سلام و مرسی از جوابتون،
منظور شما از مطلب بالا اینه که من از یه PK در جدولم دوبار به عنوان FK استفاده کردم ؟ من از هر جدولی یه PK برداشتم و از هیچ PK ای در این جدول، دو بار به صورت FK استفاده نکردم، منظورتونو میشه واضح تر بگین ؟ (شاید من اشتباه فهمیدم)
مرسی

AminSobati
دوشنبه 18 تیر 1386, 18:35 عصر
من سعی کردم همین کار شما رو انجام بدم ولی خطا نداد!


use northwind
go

drop table fktest
go

create table fktest(
c1 nchar(5) references customers(customerid) on delete set null on update cascade,
c2 int references employees(employeeid) on delete set null on update cascade,
c3 int references products(productid) on delete set null on update cascade)

hdv212
دوشنبه 18 تیر 1386, 21:02 عصر
آقای ثباتی درسته، حق با شما بود.
من در جدول Area یک بار از cityID به عنوان fk استفاده کردم،به خاطر همین اجازه نمیداد توی این جدول هم از areaID و هم از cityID به عنوان fk استفاده کنم(درستش هم همینه)، برای این جدول همون streetID به عنوان fk کفایت میکرد. باز هم ممنون.