Я сделал это, вы можете сделать это довольно просто или сойти с ума. У вас действительно возникают проблемы, но когда вы отдаете их в руки клиентов, мы собираемся попросить их выяснить первичные ключи, уникальные ограничения и внешние ключи?
Итак, предполагая, что вы хотите идти дальше с этим, вам нужен некоторый тип словаря данных, то есть хранилище метаданных. У вас есть начало, но вам нужно добавить идеи о том, что столбцы собираются в таблицы, а затем указать первичные и внешние ключи.
После этого генерация DDL довольно тривиальна. Перебирайте таблицы, просматривайте столбцы, создавайте команду CREATE TABLE. Единственное неудобство - вам нужно упорядочить таблицы так, чтобы родители создавались раньше детей. Это не сложно, реализовать http://en.wikipedia.org/wiki/Topological_ordering
На втором уровне сначала необходимо изучить существующую базу данных, а затем иногда только вводить команды ALTER TABLE ADD COLUMN .... Так что это начинает усложняться.
Тогда все будет становиться все сложнее, если вы решите разрешить DEFAULTS, указать индексы и так далее. Задача конечна, но может быть намного больше, чем кажется.
Возможно, вы захотите подумать, сколько из этого вы действительно хотите поддержать, а затем сделать ценностное суждение о его кодировании.
Мой триангулярный проект делает это: http://code.google.com/p/triangulum-db/, но это только на Альфе 2, и я бы не рекомендовал использовать его в производственной ситуации.
Вы также можете взглянуть на Doctrine, http://www.doctrine -project.org / , у них есть своего рода текстовый словарь для построения баз данных, но я не уверен, насколько далеко они " ушел с этим.