跳转到主要内容

从tcm静态结构图(SSD)生成SQL命令的工具

项目描述

tcm2sql

这是什么?

tcm2sql是一个从tcm静态结构图(SSD)生成SQL命令的工具。它是由Christian Zagrodnick为gocept开发的,用于从图表中生成一些大型PostgreSQL数据库。

这种图表类型通常用于UML中的对象结构。如果您熟悉UML符号,您应该能够快速地将tcm2sql约定应用到您的头脑中。

渲染器可以很容易地插入到tcm2sql中。目前只有PostgreSQL的渲染器。它创建与PostgreSQL兼容的create table和相关查询。文档主要基于PostgreSQL术语。有一个部分处理其他渲染器。

在先前版本中也有

  • DBObjects – 用于创建一些可能在使用DBObjects时有用的代码。

  • Prolog – 用于创建Prolog术语。

这些已经被移除,因为tcm2sql的内部API发生了巨大变化,并且实际上并不需要它们。如果您想看到这些或其他内容,请与我联系。

还有一个生成两个SSD之间差异的模式。这允许半自动更新数据库。

TCM可以从特温特大学获得。在Debian上也有版本。

感谢Christian Theune对文档的审阅。

约定

您可能想打开此包的doc目录中的Example*.ssd

双类框三类框用于表格。与UML一样,顶部用于名称,中间用于属性。底部部分用于tcm2sql中的约束。

名称

名称只是传递给create table <name>

属性

基本属性定义看起来像

<AttributeName>: <Datatype>

title: varchar(32)

行约束只是紧接在数据类型之后书写

name: varchar(64) not null

到目前为止一切顺利。但也有一些特殊字符

# – 标记一个或多个列作为PRIMARY KEY

~ – 标记一列作为FOREIGN KEY

- – 标记一列作为私有

#id: serial

定义了一个单行主键,而

#~foo: integer

#~bar: integer

定义了一个双行PRIMARY KEY,同时将它们标记为两个FOREIGN KEY。

所以整个属性定义看起来像这样

<Attribute> ::=

[“#”]{0,1}[“~”]{0,1}<AttributeName>: <Datatype> <RowConstraint>

约束

如上所述,UML中的操作是tcm2sql中的约束。

约束的定义与属性类似

<Constraint> ::= <ConstraintName>: <ConstraintOperation>

例如

invalidFoo: check (foo>47) dupeFooBar: unique (foo,bar)

为了避免在图中出现非常大的框,您还可以使用表的注释添加约束。它必须以前缀一个问号(?)。由于tcm没有指示具有注释的框的指示器,您可能可以将<ext>作为约束,这将被忽略,并是对您自己的良好提醒。

<Constraints> ::= [[<Constraint>|”<ext>”]n]*

关系

在UML中,类之间存在不同类型的关联,我尝试将其适配到PostgreSQL。

在tcm2sql中实现

  • 聚合(白色菱形)

    结果为on delete set null

    菱形必须连接到具有引用PRIMARY KEY的表。

  • 组合(黑色菱形)

    结果为on delete cascade on update cascade

    菱形必须连接到具有引用PRIMARY KEY的表。

  • 泛化(箭头)

    结果为inherits (foo)有关详细信息,请参阅PostgreSQL文档

    父表是箭头指向的地方。

  • 二元关系

    结果为两个表之间的普通关系。

    您必须在基数字段中在一个端写入1。这是PK所在的位置。

那么~有什么用呢?

在表中,每个FOREIGN KEY都必须以前缀~。有两种方式将行分配给关系。

  1. 将FK的名称作为关系上的ROLE写入。

  2. 将其命名为<Othertable>_<OthertablePK>

如何引用组合主键?

在表之间建立单个关系,并将外键名称逗号分隔地放入关系外键侧的“role name”中。

视图和私有属性

对于每个表,都会创建一个只包含公共属性的视图 sv<TableName>。如果您需要通过ODBC访问数据库但不能允许访问所有属性,只需将私有属性标记为 -,并让ODBC仅访问这些视图。

模式

创建模式

用法:bin/tcm2sql -n <file.ssd> …

生成一个包含必要的 CREATE TABLE 命令的完整sql文件(实际上它打印到stdout)。约束随后添加,因为这要容易得多。

差异模式

用法:bin/tcm2sql -o <old.ssl> -n <new.ssd> …

生成的sql执行以下操作

  • 将数据复制到临时表

  • 删除表

  • 创建新表

  • 删除已删除表的序列

  • 为新表创建序列

  • 将数据复制回

差异模式似乎工作得很好,但请确保您有最近的备份。

使用多个SSD文件创建单个数据库

随着数据库的增长,您会得到越来越多的连接。此外,tcm仅允许六个页面,这些页面会填满。为了避免这两个问题,您可以将在多个文件中拆分数据库。

传递给tcm2sql的文件以点开始。要连接到另一个ssd文件,您创建一个带有 stereotypes 的类节点。stereotype 是相对于主 ssd 的相对(或绝对)文件名。表名称引用包含 ssd 中的实际表。请参阅 ExampleInclude*.ssd 以获取示例。

可以构建包含圈,并且可以无问题地前后包含。

示例

有两个示例 ssd,只需在它们上尝试 tcm2sql。

参考文献

变更日志

1.0.0 (2010-12-14)

  • 包装鸡蛋。

  • 添加了控制台脚本的入口点。

0.9.2 (2006-10-18)

  • 重构渲染器类,使其更容易为其他数据库管理系统编写渲染器。

  • 改进了对serial和bigserial的处理:现在它们始终以整数形式编写,默认创建序列。这使更新具有serial列的表成为可能。

  • 添加了命令行选项 -no_views,以防止为表生成视图。

  • 使用法帮助更加友好。

0.9.1 (2005-03-31)

  • 多列外键

0.9 (2003-09-13)

  • 将数据库拆分为多个图(请参阅 README 中的文档)

  • 需要Python 2.2

  • 重新编写了ssd文件读取器

  • 内部数据结构有重大变化

  • 代码的可读性大大提高

  • 移除了DBObjects和Prolog渲染器;它们需要更改以适应新的结构,但目前在不需要它们。

0.04 (2002-08-02)

  • prolog渲染器

  • DBObjects渲染器(相当无用)

  • 修复了创建/删除序列的bug(bug #374)

  • 为Postgres添加了日志表

0.03 (2002-03-30)

  • 现在与python2.1兼容

  • 一些小修复

0.02 (2002-02-13)

  • 第一个公开版本

项目详情


下载文件

下载您平台上的文件。如果您不确定要选择哪一个,请了解有关 安装包 的更多信息。

源分布

tcm2sql-1.0.0.tar.gz (34.7 kB 查看散列

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面