我想获得正在进行的表的关系db。例如:
OrderDetail: Date, Product_Id, Order_Id, Quantity
在这种情况下,我希望Product_Id
和Order_Id
列是外键
答案 0 :(得分:3)
OpenEdge数据库没有明确支持"外键"。
某些应用程序模式具有可能对您有帮助的命名约定。
正如迈克所提到的,你可以循环遍历元模式表_file,_field和_index并应用遵循这种命名约定的逻辑,但是没有可以应用于所有OpenEdge数据库的通用解决方案。
例如,如果您命名约定是tableNameId的字段名称表示tableName的潜在外键,您可以尝试类似:
find _file no-lock where _file._file-name = "tableName" no-error.
if available( _file ) then
do:
find _field no-lock where _file-recid = recid ( _file ) and _field-name = "tableNameId" no-error.
if available( _field ) then
do:
message "common field exists!".
find first _index-field no-lock where _field-recid = recid( _field ) no-error.
if available( _index-field ) then
do:
message "and there is at least one index on tableNameId!".
find _index no-lock where recid( _index ) = _index-recid no-error.
message _index-name _unique _num-comp. /* you probably want a unique single component index */
end.
end.
end.
答案 1 :(得分:0)
虽然OpenEdge数据库和ABL引擎不了解关系或外部密钥,但SQL引擎确实实现了外键约束。看到 https://knowledgebase.progress.com/articles/Article/000034195
我不知道这对你有用。如果这些约束不存在,则首先定义这些约束,如果您的应用程序主要是ABL而不是SQL,则不太可能。该网站还需要通过SQL访问数据库。在ABL代码中编写SQL语句是不够的,访问需要通过SQL引擎。