Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在表定义中未声明FK关系时,如何发现或推断FK关系_Sql_Database_Firebird_Foreign Key Relationship - Fatal编程技术网

Sql 在表定义中未声明FK关系时,如何发现或推断FK关系

Sql 在表定义中未声明FK关系时,如何发现或推断FK关系,sql,database,firebird,foreign-key-relationship,Sql,Database,Firebird,Foreign Key Relationship,在我的工作中,我们有一个用于firebird数据库的数据管理应用程序,该数据库有65个表和130万条记录。开发应用程序和数据库的人早已离去。我们需要开发一个新的应用程序并使用相同的数据。我将使用C语言开发应用程序,我已经将该数据库转换为sql server。 问题是表中只有主键和索引,但没有外键。一个ID表用于为所有表生成ID,有些表还具有另一个ID字段。 我试图找出表之间的关系,但只能确定15个表。 在没有可识别外键和文档的数据库中,有没有办法找到表关系?有什么建议吗 有人吗 您可能需要深入研

在我的工作中,我们有一个用于firebird数据库的数据管理应用程序,该数据库有65个表和130万条记录。开发应用程序和数据库的人早已离去。我们需要开发一个新的应用程序并使用相同的数据。我将使用C语言开发应用程序,我已经将该数据库转换为sql server。 问题是表中只有主键和索引,但没有外键。一个ID表用于为所有表生成ID,有些表还具有另一个ID字段。 我试图找出表之间的关系,但只能确定15个表。 在没有可识别外键和文档的数据库中,有没有办法找到表关系?有什么建议吗


有人吗

您可能需要深入研究应用程序代码,以详细了解这些关系。仅仅查看数据库模式只会告诉您部分情况,这正是因为您所说的:表不包含外键或其他约束?如果您无法访问原始代码,则查看是否有任何视图/存储过程显示这些关系。@code4life我没有使用该应用程序的选项,因为没有可用的源代码,只有.exe。您可以使用Firebird 2.5跟踪API找出该应用程序使用的查询。这可能为您提供了一种对应用程序进行反向工程的方法,或者至少提供了一种识别用于联接表的列的方法。您还可以查询实际数据-如果一个表只包含另一个表中存在的ID值,则很可能这是FK。您的数据库包含的数据足以避免误报。您甚至可以自动执行此操作:以编程方式从T1生成SELECT*,其中ID1不为NULL,ID1不在T2中,从T2选择ID2,并用表名的所有可能组合替换T1和T2,用相应的列名替换ID1和ID2。为您提供空结果集的那些组合表示候选FK。