经过进一步的研究,我发现尽管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**
}