0

これは ms create table スクリプトです:

これは、SchoolclassCode と Pupil テーブルの間の N:M 関係です。

CREATE TABLE Schoolclasscode (
  schoolclassId    integer PRIMARY KEY AUTOINCREMENT NOT NULL 
);

CREATE TABLE SchoolclasscodePupil (
  pupilId_FK        integer NOT NULL,
  schoolclassId_FK  integer NOT NULL,
  /* Foreign keys */
  FOREIGN KEY (schoolclassId_FK)
    REFERENCES Schoolclasscode(schoolclassId)
    ON DELETE CASCADE
    ON UPDATE NO ACTION, 
  FOREIGN KEY (pupilId_FK)
    REFERENCES pupil(pupilId)
    ON DELETE CASCADE
    ON UPDATE NO ACTION
);

CREATE TABLE pupil (
  pupilId           integer PRIMARY KEY AUTOINCREMENT NOT NULL  
);

コードで SchoolclassCode オブジェクトを削除すると、次のようになります。

public void DeleteSchoolclass(int schoolclassCodeID, SQLiteConnection con)
        {
            using (SQLiteCommand com = new SQLiteCommand(con))
            {
                com.CommandText = "DELETE FROM schoolclasscode WHERE SchoolclassId = @SchoolclassId";
                com.Parameters.Add(new SQLiteParameter("@SchoolclassId", schoolclassCodeID));
                com.ExecuteNonQuery(); 
            }
        }

schoolclasscode テーブルのエントリが削除されます。しかし、それ以上はありません。SchoolclasscodePupil の schoolclasscodeId_FK を追加で削除することもできますが、カスケード削除制約によって削除された生徒はいません。

私は何を間違っていますか?

4

1 に答える 1

1

N:M関係では、またはいずれかNMゼロの場合があります。参照整合性は侵害されていません。

クラスを削除すると、そのクラスからすべての生徒が登録解除されます。同様に、生徒を削除すると、すべてのクラスから生徒がアンロールされます。ただし、生徒を削除してもカスケードによってクラスがキャンセルされることはありません。また、クラスを削除しても生徒が追放されることはありません。生徒が最後に受講したクラスであっても、クラスがゼロの生徒が残ります。これは、参照整合性規則の下で有効です。

于 2011-10-01T19:27:45.523 に答える