您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何以编程方式确定表之间的MySQL关系类型(1:1、1:n,n:m)?

如何以编程方式确定表之间的MySQL关系类型(1:1、1:n,n:m)?

经过进一步的研究,我发现尽管MysqL Workbench能够以某种方式对 和 关系进行逆向工程,即使当是引用外键的属性不是PK或UQ的非识别关系时,也可能对供应商特定的(InnoDB)属性执行操作。

其他sql逆向工程师工具都显示出非识别关系为OneToMany,即使它们在MysqL WorkBench中被设计为OneToOne也是非识别的。假设我执行了一个JOIN查询,以检索必要的信息以将1:1与1:n区别开来,因此sql如下所示:

select INFORMATION_SCHEMA.COLUMNS.COLUMN_KEY, INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME, INFORMATION_SCHEMA.COLUMNS.TABLE_NAME from INFORMATION_SCHEMA.COLUMNS
join INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
on INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME=INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME
where INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_NAME='table1' 
and referenced_table_name is not null

最后…

if (COLUMN_KEY == "PRI" || COLUMN_KEY == "UNI") { 
    //then you can assume is **OneToOne**
} else {
    //then you can assume is **OneToMany**
}

希望这对其他人有所帮助,可以随时添加任何建议或其他替代方法,谢谢大家。

MySQL 2022/1/1 18:48:26 有254人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶