SQL中的关系问题(列不能级联)

时间:2011-06-09 07:38:57

标签: sql-server-2005 relationships

我有3张桌子(病人,医生,预约) 患者有主键(Patient_ID)和外键(Doctor_ID) 医生有一个主键(Doctor_ID) 约会有一个主键(Appo_ID)和两个外键(Patient_ID,Doctor_ID) 这是问题,在关系图中,两个关系(Patient.Patient_ID,App.Patient_ID& Doctor.Doctor_ID,Appo.Doctor_ID)不能同时级联, 如果一个是级联,另一个显示此错误消息

- Unable to create relationship 'FK_Appointments_Doctor'.  
Introducing FOREIGN KEY constraint 'FK_Appointments_Doctor' on table 'Appointments' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.

这是我的更新程序

ALTER PROCEDURE UpdateDoc
    @Doctor_ID INT,@Name NVARCHAR(50),@Salary MONEY,@Hire_Date DATETIME,@Dept_ID INT,@Old_ID int
AS

    Update Doctor
    Set 
        @Old_ID=Doctor_ID,
    Doctor_ID=@Doctor_ID,
    [Name] =@Name,
    Salary=@Salary,
    Hire_Date=@Hire_Date,
    Dept_ID=@Dept_ID
    Where Doctor_ID=@Old_ID
Return

如果有任何更具体的问题,请问我

3 个答案:

答案 0 :(得分:1)

这是一个循环依赖,你为什么要它级联?为什么要更新Doctor_ID严格来说你不应该更新(设置)主键。

您正在使用您正在更新Where Doctor_ID=@Doctor_ID的相同值对Set Doctor_ID=@Doctor_ID进行过滤,这告诉我您没有考虑过这个问题。

答案 1 :(得分:0)

我不明白为什么你更新Doctor_ID,因为你在WHERE子句中有它:

   Update Doctor
    Set 
    Doctor_ID=@Doctor_ID,
    ....
    Where Doctor_ID=@Doctor_ID

答案 2 :(得分:0)

你有一个逻辑问题。 如果您定义患者和医生之间的联系,则无法定义与两者相关的约会。只选择其中一个,你就会得到另一个。

尝试使用现实世界示例的业务逻辑对数据库建模。 所以你有医生和病人,好吗?如果医生专门为患者服务,并且一名医生将始终与您创建与他们相关的外键的同一患者。然后,对于预约,预约与患者有关,并且由于患者自动与医生有关,因此预约仅需要患者外键。