【发布时间】:2018-09-11 17:40:10
【问题描述】:
我目前正在用 C# 编写一个应用程序,它使用 SQLite 数据库来存储用户将输入的信息。该应用程序基本上是一个管理系统,用于在应用程序中被称为“学生”的用户。这是我的数据库中最重要的表,其他所有表都与该表链接。我想要做的是当一个学生被移除时——他们离开学院/被踢出等等——是从所有其他表中移除他们的数据,这样数据就不再存在了,因为它不需要了。我编写的一些创建表语句的示例是:
CREATE TABLE student(studentID int(5) PRIMARY KEY NOT NULL, name string(16),...,DOB string(8) );
CREATE TABLE emergencyContact(emergencyID int(5) PRIMARY KEY NOT NULL, name string(16),..., contactNumber int(16));
CREATE TABLE emergencyContactOf(studentID int(5) FOREIGN KEY REFERENCES student('studentID'), emergencyID int(5) FOREIGN KEY REFERENCES emergencyContact('emergencyID');
我已阅读此内容,我的理解是,如果我包含“ON DELETE CASCADE”语句,则会删除 EmergencyContactOf 表中的数据,因为 StudentID 键将不再存在于 Parent 表中。
但是,我的理解是,EmergencyContact 表中针对该特定学生的数据不会被删除,因为没有引用 StudentID。
我的问题是,有没有办法从该表中删除与该学生相关的数据?例如,如果我要在 EmergencyContact 表中包含一个列,它将引用 StudentID 作为外键,然后如果从父表中删除了 StudentID,则删除该行?这是解决这个特定问题的好方法吗?
我拥有的所有其他表也是这样设计的,其中数据位于不同的表中,然后通过关系表链接回 Student 表,因此这也适用于我拥有的所有其他表。
谢谢。
【问题讨论】:
-
没有回答您的问题,但您确实希望使用INTEGER PRIMARY KEY,而不是
int(5) PRIMARY KEY来提高您的表格效率...
标签: sql database sqlite c#-4.0 cascade