使用SQL Developer进行Oracle FK约束逆向工程

pxyaymoc  于 2023-04-29  发布在  Oracle
关注(0)|答案(2)|浏览(319)

我的作业是分析FK约束如何工作,并使用Java/JDBC模拟它。
有没有可能发现DBMS只使用SQL Developer和INSERT语句按顺序处理外键?

INSERT INTO GRADES (idn, idu, idp, ido, kind) VALUES (1, 1, 1, 1, 'C')

(idn、idu、idp和ido是FK。)
我确实测试了所有有效/无效键的组合--我注意到DBMS一次只给出一个异常(即使有几个FK无效),并且它会从右到左检查它们--如果ido无效,我只会得到ido的异常,其余的有效性无关紧要,或者如果ido有效,idn和idu可能有效或无效,我会得到idp的异常。
我能推断出上面例子中的算法是这样的吗?

if(!isValid(ido) {
        throw new SQLexception(ido);
    } else if(!isValid(idp) {
        throw new SQLexception(idp);
    } else if(!isValid(idu) {
        throw new SQLexception(idu);
    } else if(!isValid(idn) {
        throw new SQLexception(idn);
    }

检查DBMS如何验证FK约束的更好方法是什么?

hujrc8aj

hujrc8aj1#

是否可以确定DBMS仅使用SQL Developer和INSERT语句按顺序处理FK?
否(如果您ONLY有SQL Developer和INSERT语句)。
SQL Developer是一个客户端应用程序(IDE),由用户在本地运行以与数据库(可以是远程的或本地的)进行通信。除了执行语法突出显示和检查之外,SQL Developer实际上不处理SQL语句。客户端应用程序将这些SQL语句发送到数据库,供数据库的SQL引擎进行评估,然后等待数据库响应并向用户显示响应。数据库将解析SQL语句。
如果你只有SQL Developer,那么你没有数据库,没有任何东西可以处理SQL语句,没有表可以插入,也没有外键约束。你必须有一个数据库。

lndjwyie

lndjwyie2#

是否可以确定DBMS仅使用SQL Developer和INSERT语句按顺序处理FK?
不可以。外键求值的顺序没有保证,所以即使你根据某种测试找到了顺序,顺序也可能会随着更新、服务器负载的变化、优化的变化而变化,如果你在维护窗口中,等等。
您无法完全模拟DBMS行为,因为即使使用DBMS本身也无法进行模拟。
在“only INSERT”设置中,你能做的最好的事情就是INSERT和ROLLBACK。看看有什么错误,如果有。
第二个最佳策略选择您喜欢的外键检查序列并使用它。有关什么外键被违反的信息并不重要:重要的是,其中一项或多项受到侵犯

相关问题