删除外键时显示视图中的问题?

时间:2011-09-14 13:54:16

标签: c# sql-server winforms

我有一张学生表和一张教育表,教育表的PK作为学生表的外键。但是,删除教育后,学生将不再出现在视图中。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

根据您的要求,我认为您应该首先重新考虑您的数据库结构。

回答以下问题:

  1. student与不存在的education合作是否有意义?

    如果您在education表中删除了Educations,但是在该数据库中存在FK到该education行的学生,则会出现这种情况。这似乎是你要求的,但它没有多大意义,因为它没有保持数据的完整性。

  2. 如果学生入选education,您是否可以删除education

    如果不允许这样做,那么你只需要在1对多关系中禁用级联删除,你的问题就会得到解决。

  3. 如果eduction被删除,是否所有分配到所述教育的学生都会留在数据库中?

    这是你想要的,但是对于数据库的结构来说,实现起来并不简单。

  4. 更简单的解决方案?

    一个是创建3个表而不是2个表:

    1. 的教育
    2. 学生
    3. StudentsEducationAssignments
    4. 在1中,您只存储与education实体有关的内容。仅在2中与您的student实体有关(请注意,他们选择的education类型不仅仅是student}。在3中,您可以将学生分配给哪些教育。

      这样,如果删除education,分配给它的学生将不会被删除,只会删除将学生与特定education联系起来的信息。通过这种方式可以更轻松地保持数据库完整性。

      希望这有帮助。

答案 1 :(得分:1)

根据您提供的信息,我的猜测是您在数据库中强制执行了参照完整性。这意味着当您删除教育中的一行时,与其链接的学生也会被删除。

答案 2 :(得分:1)

我发现最好不要删除表中的数据,因为其他字段依赖于它们。相反,你应该在表中有一个名为'IsDeleted'的布尔值,当你想要'删除'时,只需将其更改为True,当你提取数据时,请确保过滤掉任何具有'IsDeleted'集的内容到'真'

答案 3 :(得分:0)

您的视图中可能是OUTER JOIN而不是INNER JOIN?

如果你向我们展示了视图定义,我们可以提供更多帮助,没有它我们只是在猜测。