11

有些人喜欢用简单的文本方式来描述他们的数据库结构,而不是使用CREATE TABLE语句。几个例子:

您知道任何将这种速记符号转换为实际 SQL 语句的软件吗?

4

2 回答 2

7

实际上,我刚刚创建了一个 php 脚本,它正是这样做的,但我希望那里有更专业的东西......

我的转换器演示:

http://simpleddl.orgfree.com

示例输入:

= 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

输出:

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 );
于 2012-03-09T20:35:20.577 回答
3

我看到您提到了http://sqlfiddle.com上提供的 text-to-ddl 工具。这实际上是我用 JavaScript 构建的一个工具(sqlfiddle.com 是我的网站),专门用于尝试更轻松地获取人们在 StackOverflow 问题中发布的文本表,并更快地将它们转换为真正的 DDL。我认为它对于相当多的文本表格格式的常见变体来说效果相当好,但我确信它可以使用一些工作来处理更多种类。我通过单独的 handlebars.js 模板支持不同的 DDL 类型(MS SQL、Oracle、PostgreSQL、MySQL 和 SQLite)。

整个库都是用 JavaScript 编写的,所以如果有人想帮助我把它做得更好,我会喜欢你的贡献。 在 github 上 fork 我并查找文件 javascripts/ddl_builder.js。我很想有一些拉请求!

于 2012-03-29T20:08:02.267 回答