在我们的应用程序中,我们需要防止用户向数据库中插入不符合条件的记录。条件是 select 语句的 where 子句,由某个管理员用户定义。这是一个示例,有一个名为“Book”的表,管理员用户将条件定义为“pages<=200 OR type='Children's book'”。定义该标准后,不允许将页面超过 200 页且类型不是“儿童书”的书籍插入数据库。
Table: Book (id, name, author, pages, type)
Criteria: "pages<=200 OR type='Children's book'"
条件可能更复杂,但将遵循 oracle sql 语法。我能想到的一个选择是先插入记录,然后检查它是否可以通过标准选择出来,如果不能,那么我们从数据库中删除 if,但我认为应该有一种更简洁的方法来完成这项工作。如果能用一条sql语句就可以完成就好了。
有没有人有更好的方法来完成这项工作?任何答案将不胜感激。
更新:
感谢您的回答,我想我应该提供更多详细信息。
有问题的用户是应用程序用户,包括“管理员用户”,它不是 dba。标准可以经常更改,并且对于不同的用户组,我们可能在同一张表上有不同的标准。因此,希望可以在应用程序端进行检查。我们正在使用具有自己 ORM 的 django,但我认为我应该首先找到一种使用 sql 语句的方法,这将在某些时候连接标准。理想情况下,我们可以将“where 子句”约束附加到插入语句,以便在值满足这些约束时将记录插入数据库,否则什么也不做。