从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都必须以前缀~。有两种方式将行分配给关系。
将FK的名称作为关系上的ROLE写入。
将其命名为<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 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | f6dd5aadde55f925eb39922ecaa2e6384d073e2675c4e027ec2b270ec9426535 |
|
MD5 | 313f2fec25adf343863b698aeb58880c |
|
BLAKE2b-256 | 60fda0438c8d36fec9dd46a868ec3d371f01e4612c6737c20e24689c188c3cdb |