1

我有 3 个表(Patient、Doctor、Appointments)患者有一个主键(Patient_ID)和一个外键(Doctor_ID)医生有一个主键(Doctor_ID)约会有一个主键(Appo_ID)和两个外键(Patient_ID、Doctor_ID) ) 这里的问题是,在关系图中,两个关系(Patient.Patient_ID,App.Patient_ID & Doctor.Doctor_ID,Appo.Doctor_ID)不能同时级联,如果一个是级联的,另一个显示这个错误信息

- 无法创建关系“FK_Appointments_Doctor”。  
在表 'Appointments' 上引入 FOREIGN KEY 约束 'FK_Appointments_Doctor' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
无法创建约束。请参阅以前的错误。

这是我的更新程序

ALTER PROCEDURE 更新文档
    @Doctor_ID INT,@Name NVARCHAR(50),@Salary MONEY,@Hire_Date DATETIME,@Dept_ID INT,@Old_ID int
作为

    更新医生
    放
        @Old_ID=医生 ID,
    Doctor_ID=@Doctor_ID,
    [姓名] =@姓名,
    薪水=@薪水,
    Hire_Date=@Hire_Date,
    Dept_ID=@Dept_ID
    其中 Doctor_ID=@Old_ID
返回

如果有更具体的问题,问我

4

3 回答 3

1

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

你正在过滤Where Doctor_ID=@Doctor_ID你正在更新的相同值,这Set Doctor_ID=@Doctor_ID告诉我你还没有通过这个。

于 2011-06-09T07:43:54.287 回答
0

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

   Update Doctor
    Set 
    Doctor_ID=@Doctor_ID,
    ....
    Where Doctor_ID=@Doctor_ID
于 2011-06-09T07:43:18.993 回答
0

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

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

于 2011-06-09T08:09:39.027 回答