处理下拉列表、项目未使用、关系完整性的最佳方法
本文关键字:最佳 完整性 方法 未使用 下拉列表 项目 处理 关系 | 更新日期: 2023-09-27 18:17:34
这已经出现了几次,我想知道你们会如何处理这个问题(如果是重复的,请道歉,知道要搜索什么是很棘手的):
所以我有一个允许编辑记录的web应用程序。该记录的属性之一是Guid,它通过选项的下拉列表设置。
对于这个特殊的应用程序,我需要管理员能够修改下拉列表绑定到的项目列表中的可用选项列表。
那么,当管理员从列表中删除一个选项(无论是真正的数据库删除,还是通过inUse)时,最好的处理方法是什么?Bool值更改),这意味着持有该值的任何记录在父列表中都没有匹配项可以绑定。幸运的是,在MVC中@Html。如果匹配的选项不存在,DropDownListFor helper只是将选择的值设置为null,避免了任何NullRefExceptions,但是那样会(至少在本例中)使ModelState无效,并且意味着记录不会显示在基于该值的任何选择查询中。
我是否在尝试删除/禁用x条记录会受到影响的选项时添加警告,或者完全禁用修改操作,除非没有记录会受到影响(要求所有保存该值的记录都要提前修改)?
感谢您的提前输入。
看情况。简单地说,如果管理员删除了先前设置的选项,那么下次更新记录时,下拉菜单将被设置为默认选项或空选项。只要验证必须被选中,那么用户就会得到一个错误,说他们必须选择一个选项。在某种程度上,它会自己照顾自己。
然而,至少可以说,依靠用户最终清理这些是不理想的。如果不具体说明这些选项与什么相关,很难说,但不应该一时兴起就删除一个潜在的选项。如果有正当理由移除,那么还应该考虑替换。如果是这种情况,那么您可以简单地运行查询,将旧的、不再可用的选项的所有记录移动到新的首选选项。如果它是被删除并且确实没有替代的东西,那么实际的外键应该为空,以保持引用完整性。这意味着外键应该在第一个中为空。如果有一个业务案例要求它不可为空,那么应该在应用程序级别的验证中强制执行,而不是在数据库中强制执行。
无论长短,在您删除其中一个选项后,您的数据应该处于一致状态,无需用户干预。然后,如果用户需要采取一些操作(因为关系不能保持为空),您可以通知他们回到应用程序并选择一些新选项。