0

这是 ms 创建表脚本:

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关系中,要么为零,N要么M为零。没有违反参照完整性。

删除班级将注销该班级的所有学生。同样,删除学生会将他们从所有班级展开。但是删除一个学生永远不会导致级联取消一个班级,删除一个班级也不会驱逐一个学生。即使这是学生上的最后一堂课,你也会留下一个零课的学生,这在参照完整性规则下是有效的。

于 2011-10-01T19:27:45.523 回答