数据库架构设计工具/模块化数据库设计

时间:2009-04-03 12:10:56

标签: mysql database schema modularity

我正在开发可以部分从模块构建的应用程序。例如,我将能够开发一些在线社区,其中包含模块“论坛”,“博客”,“图库”等。

目前我有一个大型数据库ERM,其中包含所有具有外键连接的模块的所有表,我正在使用dbwrench来构建此ERM。但是,我对这种方法不是很满意。我想有一个ERM设计师,它可以以面向模块的方式工作。我想将数据库表保存在每个模块的单独模式文件中,但在这些不同的模式之间保留外键引用。

但是,我无法找到任何支持此工具的工具 - 这是错误的方法或如何设计“模块化ERM”/模块化数据库方案?

谢谢!

5 个答案:

答案 0 :(得分:2)

我绝对相信,这是正确的方法。遗憾的是,数据库社区还没有采用模块化设计,敏捷软件开发等新概念。

如果我有选择,我让ORM工具创建脚本的基础,并手动添加不属于ORM的细节(例如特殊索引,表空间,分区),并手动创建迁移脚本(在两个版本的完整脚本之间有基于文本的差异时,这是非常简单的。

所以我最终得到了三种脚本: 自动生成的脚本,用于生成新数据库。 手动生成的脚本执行相同操作,但添加了一些与功能要求无关的详细信息。 一组迁移脚本,用于将数据库从一个版本逐步移动到下一个版本。

我还有一堆测试,使用这些脚本的组合创建各种模式并比较它们。

如果我需要图表,我可以使用一些逆向工程从对象模型的模式或代码创建图表。

答案 1 :(得分:2)

我同意模块化设计是要走的路。当我们为客户创建应用程序时,我们倾向于向他们出售我们已经构建的一组小部件。那么当客户说“我访问了网站X并且我喜欢他们的小部件Y时会发生什么。你能将它添加到我的应用程序/网站吗?”

客户A支付小部件Z是件好事,然后我们可以卖给所有其他客户。诀窍是以这样的方式构建这些小部件,使它们适合而不会破坏当前的应用程序。

查看此链接以及说明中确定的来源。

MediaWiki Design - See notes at the bottom

答案 2 :(得分:1)

我为每个模块架构保留了单独的数据库构建脚本,并在注释中注明它们依赖的其他模块。然后,我根据需要将模式添加到与应用程序对应的数据库中。使用普通索引而不是外键。我总是发现手动操作最适合极其模块化的任务。

答案 3 :(得分:1)

我更喜欢使用模式。这是封装关注区域的自然方式(无论是模块的模式还是模式覆盖信息区域)。

我正在使用PostgreSQL,我更喜欢自己编写db启动(我想要100%控制,SQL就像它得到的一样明确。)。我使用SchemaSpy生成ER图。 我对模式中的多个模式和外键没有任何问题 - 不确定它在MySQL中是如何工作的。

我不熟悉您提到的工具,但是,屏幕截图似乎显示它们支持模式。可能值得再次检查。 http://www.dbwrench.com/screenshots/xp_explorer.shtml

至于模块化设计,我不确定模式是否足够,imho模式使大脑更容易对数据如何相关做出假设,它本身不会使模块更加模块化。请澄清您对模块化方式的需求。

答案 4 :(得分:0)

我已经在Oracle数据库中使用了模块化。您可以通过SYNONYM访问外键,视图,表,函数,存储过程。您必须执行以下两个查询,才能从父级的子模式中生成SYNONYM。

grant DELETE, INSERT, UPDATE, SELECT on parentUser.table1 to childUser;
CREATE OR REPLACE SYNONYM childUser.table1 FOR parentUser.table1;

table1存在于parentUser模式中,但是执行上述查询后,您可以从childUser访问该表。