自动数据库模式生成系统?

时间:2011-01-13 19:05:44

标签: database schema taxonomy

我正在和一个拥有一个自定义网站软件的客户合作,这个软件有一些我以前从未见过的东西。它有一个MySQL数据库后端,但大多数表都是由php代码自动生成的。这允许最终用户根据需要创建表和字段。所以它是数据库中的数据库,但显然没有“最外层”数据库中的所有可用功能。有几个表基本上是自动生成的表名和字段到用户友好的表名和字段的映射。*这使查询感觉非常不直观:P

他们正在寻找一些额外的功能,这些功能在您直接使用数据库时立即可用,例如数据类型实施,外键,唯一索引等。但由于这是数据库中的数据库,所有这些功能都有要添加到运行数据库的php代码中。我想到的第一件事是Inner Platform Effect * - 但我没有办法摆脱数据库模拟,仍然为他们提供所需的功能!

我想知道,我是否可以创建一个系统,让用户能够创建“真实”表格,从而获得免费的所有关系功能?在过去,创建表的开发人员/管理员始终是,然后用户通过应用程序执行CRUD操作。我对让用户访问模式操作感到不舒服,即使是通过应用程序也是如此。我处于未知领域。

这种系统有名称吗?在内部,在代码中,这称为“集合”系统。数据库中“虚拟”表和字段的名称称为“分类法”。这与CCK或Drupal中的分类模块类似吗?我正在寻找能够做到这一点的软件模型,所以我可以看到陷阱和好处是什么。基本上我正在寻找有关这种系统的更多外部信息。

  • 请注意,这不是一个简单的键值映射,就像关于内部平台效果引用的维基百科文章一样。这些工作就像多个单元格的实际元组一样 - 就像简单的数据库表一样。

1 个答案:

答案 0 :(得分:2)

我已经完成了这个,你可以让它变得非常简单,或者完全坚定。当你把它放到顾客手中时,你会遇到问题,我们是否会要求他们找出主键,独特限制和外键?

因此,假设您想要考虑到这一点,您需要某种类型的数据字典,即元数据存储库。您有一个开始,但您需要将收集列的想法添加到表中,然后指定主键和外键。

之后,生成DDL相当简单。循环遍历表,循环遍历列,构建CREATE TABLE命令。唯一的障碍是您需要对表进行排序,以便在子项之前创建父项。这并不难,实施http://en.wikipedia.org/wiki/Topological_ordering

在第二级,您首先必须检查现有数据库,然后有时只发出ALTER TABLE ADD COLUMN ...命令。所以它开始变得复杂。

然后事情继续变得更加复杂,因为您考虑允许DEFAULTS,指定索引等等。任务是有限的,但可能比看起来要大得多。

您可能希望考虑您真正想要支持的内容,然后对编码进行评估。

我的triangulum项目执行此操作:http://code.google.com/p/triangulum-db/但它仅在Alpha 2处,我不建议在生产情况下使用它。

你也可以看看Doctrine,http://www.doctrine-project.org/,他们有一些基于文本的字典来构建数据库,但我不知道他们已经走了多远。