我有一张学生表和一张教育表,教育表的PK作为学生表的外键。但是,删除教育后,学生将不再出现在视图中。我该如何解决这个问题?
答案 0 :(得分:1)
根据您的要求,我认为您应该首先重新考虑您的数据库结构。
回答以下问题:
让student
与不存在的education
合作是否有意义?
如果您在education
表中删除了Educations
,但是在该数据库中存在FK到该education
行的学生,则会出现这种情况。这似乎是你要求的,但它没有多大意义,因为它没有保持数据的完整性。
如果学生入选education
,您是否可以删除education
?
如果不允许这样做,那么你只需要在1对多关系中禁用级联删除,你的问题就会得到解决。
如果eduction
被删除,是否所有分配到所述教育的学生都会留在数据库中?
这是你想要的,但是对于数据库的结构来说,实现起来并不简单。
更简单的解决方案?
一个是创建3个表而不是2个表:
在1中,您只存储与education
实体有关的内容。仅在2中与您的student
实体有关(请注意,他们选择的education
类型不仅仅是student
}。在3中,您可以将学生分配给哪些教育。
这样,如果删除education
,分配给它的学生将不会被删除,只会删除将学生与特定education
联系起来的信息。通过这种方式可以更轻松地保持数据库完整性。
希望这有帮助。
答案 1 :(得分:1)
根据您提供的信息,我的猜测是您在数据库中强制执行了参照完整性。这意味着当您删除教育中的一行时,与其链接的学生也会被删除。
答案 2 :(得分:1)
我发现最好不要删除表中的数据,因为其他字段依赖于它们。相反,你应该在表中有一个名为'IsDeleted'的布尔值,当你想要'删除'时,只需将其更改为True,当你提取数据时,请确保过滤掉任何具有'IsDeleted'集的内容到'真'
答案 3 :(得分:0)
您的视图中可能是OUTER JOIN而不是INNER JOIN?
如果你向我们展示了视图定义,我们可以提供更多帮助,没有它我们只是在猜测。