首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除外键时显示视图出现问题?

删除外键时显示视图出现问题?
EN

Stack Overflow用户
提问于 2011-09-14 21:54:16
回答 4查看 107关注 0票数 1

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

EN

回答 4

Stack Overflow用户

发布于 2011-09-14 22:06:08

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

回答以下问题:

  1. 拥有一个带有不存在的educationstudent有意义吗?

如果您在Educations表中删除了一个education,但对该education行具有FK的学生仍在您的数据库中,就会出现这种情况。这似乎是您所要求的,但它没有多大意义,因为它不包含数据integrity.

  • Should,如果学生在education中登记,是否允许您删除education

如果不允许,那么你只需要在一对多的关系中禁用级联删除,你的问题就解决了。

  • 如果删除了eduction,所有分配到该教育的学生是否应该保留在数据库中?

这是您想要的,但根据数据库的结构,实现起来并不简单。

更简单的解决方案?

一种方法是创建3个表,而不是2个:

  1. Educations
  2. Students
  3. StudentsEducationAssignments

在1中,你存储了所有只与你的education实体有关的东西。在2中,只有与您的student实体相关的内容(请注意,他们选择的education类型并不仅仅是描述student的内容)。在3中,你存储什么学生被分配到什么教育。

这样,如果您删除一个education,分配给它的学生将不会被删除,只会删除将学生与该特定education联系在一起的信息。这样可以更容易地保持数据库的完整性。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2011-09-14 22:07:45

从您提供的信息来看,我猜测您已经在数据库上强制执行了引用完整性。这意味着当您删除教育中的一行时,与其链接的学生也将被删除。

票数 1
EN

Stack Overflow用户

发布于 2011-09-14 22:08:27

我发现,最好不要从表中删除数据,因为其他字段依赖于这些数据。相反,您应该在表中有一个名为'IsDeleted‘的布尔值,当您想要’删除‘它时,只需将其更改为True,并且当您提取数据时,请确保过滤掉'IsDeleted’设置为'True‘的任何内容

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7417493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档