2012-03-09 16 views
11

A algunas personas les gusta describir su estructura de base de datos de una manera textual simple en lugar de usar las declaraciones CREATE TABLE. Algunos ejemplo:Lenguaje simplificado/abreviado de definición de datos SQL ¿Idiomas?

¿Conoce usted acerca de cualquier software que convierte este tipo de notación abreviada para las sentencias SQL reales ?

+0

Hay algunas herramientas que pueden hacer lo contrario (como una imagen, no sé para la notación abreviada). Cree una base de datos (con instrucciones SQL o con GUI) y la herramienta realiza un dibujo de las tablas. Ver [esta pregunta] (http://stackoverflow.com/questions/8895806/how-to-implement-polymorphic-associations-in-an-existing-database/9449031#9449031). Creo que el OP allí usó Visio. La imagen en mi respuesta se hizo mi MySQL Workbench. –

+0

Sí, hay tantas soluciones click'n'draw-your-database, pero tan pocas (¿hay alguna?) Que funcionen sin usar el mouse. – biziclop

+0

La mayoría de las herramientas que he usado pueden leer buen viejo SQL simple. Y muchas herramientas tienen ingeniería inversa que recupera las tablas SQL de las bases de datos existentes. Y puede dibujar buenos diagramas. –

Respuesta

7

En realidad, acabo de terminar la creación de un script PHP, que hace exactamente esto, pero espero que hay algo más profesional por ahí ...

demostración de mi convertidor:

http://simpleddl.orgfree.com

de entrada Ejemplo:

= ID id P AI 

person 
    ID 
    mother_id -> person 
    father_id -> person 
    !FK mother_id, father_id -> family U:C, D:C 

family 
    P female_id -> person 
    P male_id -> person 

de salida:

CREATE TABLE IF NOT EXISTS person (
    id   INT NOT NULL AUTO_INCREMENT, 
    mother_id INT NOT NULL, 
    father_id INT NOT NULL, 
    PRIMARY KEY (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

CREATE TABLE IF NOT EXISTS family (
    female_id INT NOT NULL, 
    male_id INT NOT NULL, 
    PRIMARY KEY (female_id, male_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

ALTER TABLE person ADD FOREIGN KEY (mother_id) REFERENCES person(id); 
ALTER TABLE person ADD FOREIGN KEY (father_id) REFERENCES person(id); 
ALTER TABLE person ADD FOREIGN KEY (mother_id, father_id) REFERENCES family(female_id, male_id) ON DELETE CASCADE ON UPDATE CASCADE; 

ALTER TABLE family ADD FOREIGN KEY (female_id) REFERENCES person(id); 
ALTER TABLE family ADD FOREIGN KEY (male_id) REFERENCES person(id); 
+1

Eso es genial. ¿Es compatible con otros DBMS (por ejemplo, PostgreSQL) también? –

+0

El enlace de arriba está vencido mientras tanto. Si está interesado, deje un comentario aquí :) – biziclop

+0

biziclop Me gustaría ver su código y las ideas de notación (en realidad, estoy interesado en ddl para Oracle en este momento), ¿tiene esto en un repositorio público en cualquier lugar? – plockc

2

Veo que mencionó la herramienta de texto a ddl que está disponible en http://sqlfiddle.com. Esta es en realidad una herramienta que construí (sqlfiddle.com es mi sitio) en JavaScript específicamente para intentar que sea más fácil tomar las tablas de texto que las personas publican en sus preguntas de StackOverflow y traducirlas más rápidamente a DDL real. Creo que funciona bastante bien para una buena cantidad de variación común de los formatos de tablas de texto, pero estoy seguro de que podría usar un poco de trabajo para manejar una mayor variedad. Apoyo los diferentes tipos de DDL a través de plantillas separadas de handlebars.js para cada uno (MS SQL, Oracle, PostgreSQL, MySQL y SQLite).

Toda la biblioteca está escrita como JavaScript, por lo que si alguien quisiera ayudarme a mejorarla, me encantaría su contribución. Fork me on github y busque el archivo javascripts/ddl_builder.js. Me encantaría tener algunas solicitudes de extracción!

+0

¡Hola, gracias por tu respuesta y sqlfiddle! :) – biziclop

Cuestiones relacionadas