Я пытаюсь запросить сервер MySQL, чтобы определить информацию о базе данных, чтобы создать некоторый код.
Я довольно успешно использовал Java JDBC и таблицу INFORMATION_SCHEMA для этого, но проблема в том, что мне нужно определить, является ли отношение таблицы OneToOne , OneToMany или ManyToMany. Я не могу найти хороший способ добиться этого, и мне бы очень хотелось, чтобы кто-нибудь мог мне немного помочь, и если это возможно, с решением, которое не является специфичным и надежным для MySQL, чтобы оно могло помочь другим.
Я нашел этот вопрос в stackoverflow, но он не решит проблему: как -для-определения-мощности-внешнего-ключа-использования-mysql
EDIT (More) Чтобы лучше объяснить мою проблему, я добавлю немного больше информации. В настоящее время я использую MySQL с InnoDB и MySQL Workbench для создания диаграммы EER и генерации SQL для создания базы данных.
Я пытаюсь перепроектировать в своем Java-приложении отношение между двумя существующими таблицами, чтобы определить, является ли таблица OneToOne, OneToMany или ManyToMany. Проблема в том, что когда я разрабатываю модель в MySQL Workbench и создаю связь между двумя таблицами, я не вижу никакой разницы между неидентифицирующим 1:1 и неидентифицирующим 1:N, даже если их выходные данные SQL одинаковы.
Не идентифицирующий 1:1
CREATE TABLE IF NOT EXISTS `TestDB`.`table1` (
`var1` BIT(1) NOT NULL,
`var2` BIT(8) NOT NULL,
`var3` VARCHAR(45) NULL DEFAULT NULL,
`var4` INT(11) NOT NULL,
`table2_var1` INT(11) NOT NULL,
PRIMARY KEY (`var1`, `var2`),
INDEX `fk_table1_table2_idx` (`table2_var1` ASC),
CONSTRAINT `fk_table1_table2`
FOREIGN KEY (`table2_var1`)
REFERENCES `TestDB`.`table2` (`var1`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci
Неидентифицирующий 1:n
CREATE TABLE IF NOT EXISTS `TestDB`.`table1` (
`var1` BIT(1) NOT NULL,
`var2` BIT(8) NOT NULL,
`var3` VARCHAR(45) NULL DEFAULT NULL,
`var4` INT(11) NOT NULL,
`table2_var1` INT(11) NOT NULL,
PRIMARY KEY (`var1`, `var2`),
INDEX `fk_table1_table2_idx` (`table2_var1` ASC),
CONSTRAINT `fk_table1_table2`
FOREIGN KEY (`table2_var1`)
REFERENCES `TestDB`.`table2` (`var1`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci
Удивительная часть начинается, когда я реверсирую базу данных с помощью MySQL Workbench, чтобы увидеть, может ли она угадать, была ли это 1:1 или 1:n. Угадайте, на диаграмме правильные стрелки отношений!!! Возможно, он где-то хранит ссылку как уникальную, или InnoDB имеет это в своей собственной INFORMATION_SCHEMA, специфичной для поставщика, но я хотел бы воспроизвести это поведение в своем приложении.
Любые идеи о том, как я могу этого достичь?