1

3 つのテーブル (Patient、Doctor、Appointments) があります。患者には主キー (Patient_ID) と外部キー (Doctor_ID) があります。医師には主キー (Doctor_ID) があります。 ) ここに問題があります。関係図では、2 つの関係 (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 UpdateDoc
    @Doctor_ID INT,@Name NVARCHAR(50),@Salary MONEY,@Hire_Date DATETIME,@Dept_ID INT,@Old_ID int
なので

    ドクターの更新
    設定
        @Old_ID=ドクターID、
    Doctor_ID=@Doctor_ID,
    [名前] =@Name,
    Salary=@Salary,
    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

WHERE句にDoctor_IDがあるので、なぜDoctor_IDを更新するのかわかりません。

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

論理的な問題があります。患者と医師の間のつながりを定義する場合、両方に関連する予定を定義することはできません。そのうちの 1 つだけを選択すると、もう 1 つが得られます。

実際の例のビジネス ロジックを使用して、データベースをモデル化してみてください。医者と患者がいますよね?医師が患者に専念しており、1 人の医師が常に同じ患者を診察する場合は、医師に関連する外部キーを作成します。次に、予約の場合、予約は患者に関連付けられます。患者は自動的に医師に関連付けられるため、予約には患者の外部キーのみが必要です。

于 2011-06-09T08:09:39.027 に答える