从类模型转换到数据库表结构 的思考 Aaron 从类模型转换到数据库表结构,或者说从UML类图转换为ER图,这个功能并不实用 。 为什麽呢? 如果你的类模型能够完整地转换为表结构(每一个表都能找到与之相关的类,如果类之间是多对多关系,那 么 会增加一个中间
从类模型转换到数据库表结构的思考
Aaron
从类模型转换到数据库表结构,或者说从UML类图转换为ER图,这个功能并不实用。
为什麽呢?
如果你的类模型能够完整地转换为表结构(每一个表都能找到与之相关的类,如果类之间是多对多关系,那么会增加一个中间表),那么说明你的类图是不完整的,它们仅仅抽象了领域模型的数据资源,并没有抽象出领域模型的业务行为,因为表结构只能描述静态资源,不能描述业务行为。也就是说,你的类模型是“失血模型”。
我们这里不讨论“失血模型”与“充血模型”的优缺点,有兴趣的朋友可自己去javaeye上搜索。
当然,你也可以认为,即使使用了充血模型,仍然可以从类模型映射为表结构。但从实际情况来看,数据表的设计与类模型的设计常常有着差异。毕竟从DBA的角度抽象对象(其实DBA只能抽象对象的数据),与程序员从OO的角度抽象对象(数据和业务行为)是不同的。
数据表的关系是二维的(关系性数据库),而类模型的关系是三维的(OO的特性),类模型的关系远比数据表的关系复杂,比如类之间有继承,而表结构是不可能继承的。这就是数据库与类模型的“阻抗”。
正因为数据库与类模型有阻抗,所以从类模型生成表结构是不现实的,它们不可能有标准的规则进行完美转换。除非是小项目,否则从类模型生成表结构