如何解决在SQL数据库中输入最小/最大行数
我们如何迫使用户输入一定数量的行。 例如,如果某个学生必须选修一门课程的5个科目,那么我们如何应用这些类型的约束,或者如何迫使用户输入最小行数或最大行数。
例如:一个学生可以为该课程选择最少5个和最多6个科目。 如果我们要考虑到这些约束而采用模式或数据库表,那么我们应该如何在Oracle中创建一个表。
解决方法
确实没有一种简便的方法来强制执行多行约束。问题是您的数据库将在某个时候违反约束,即使您知道最终不会这样做。就像,当您的学生选修一门科目并且即将再选四门科目时,您就违反了法律。
此处的键是 deferrable constraint 。在提交事务之前,不会强制执行这些操作。而且即使默认情况下将约束创建为可延迟的,它仍将立即执行。因此,您可能希望将约束创建为DEFERRABLE INITIALLY DEFERRED
。看起来像这样:
subject_count NUMBER(10) NOT NULL DEFAULT 0,CONSTRAINT ck_subject_count CHECK ( subject_count BETWEEN 5 AND 6 )
DEFERRABLE INITIALLY DEFERRED
好的,所以您知道您需要一个可延期的约束。你穿什么呢?您基本上有两个选择。您需要一个表,该表每个学生都有一行,并且该学生的科目总数。您可以通过触发器为每个插入增加列,为每个删除减少列,或者通过使用提交时刷新的实例化视图来将该总数作为应用程序代码的一部分来维护。就个人而言,我可能会使用table +触发器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。