我正在尝试使用 Sparx Enterprise Architect 设计一个数据模型,该模型最终将存储在 MySQL 数据库中。
我的第一个方法是 Data Model diagram , 可用于 generate DDL (或通过 reverse engineering 反过来)。
这很有效,但一位同事指出了一个问题:我们打算使用 ORM(几乎可以肯定是 Hibernate)将表映射到 Java 类。他的评论是“数据库优先”的方法将排除使用良好的 OO 技术,例如继承。
这似乎是一个好点,但我想知道是否有任何限制。如果我从头开始使用 Class Diagram代替数据模型图,是否有一种方法可以在此模型中包含所有必要的 Hibernate 注释、配置等?而且,如果我以后需要对特定于数据库的功能(例如约束、触发器等)进行建模,考虑到类图并不是真正针对此类事物,所有这些都可以在模型中实现吗?
最佳答案
我用一个问题来回答:如果你要盖房子,你是先盖好再做蓝图还是先做计划? :)
软件开发就是逐渐降低抽象。我们从一个非常抽象的项目想法开始,然后提出一些要求(这显然不那么抽象),然后是架构、设计和最终进入编码级别(最低抽象)
数据模型是最低抽象级别的模型(可直接映射到 DDL),因此这是您要做的最后一件事。
领域类模型是数据库的更高抽象。它甚至是 Hibernate 层的抽象,因为它也位于抽象的实现级别。
因此,我肯定会首先使用类和 OO 的全部功能为域建模。尝试使实现独立的类模型。不要假设 JAVA、Hibernate、DB 等任何东西,而是专注于您的域逻辑。制作一种“乌托邦”域模型,逻辑上结构完美的域类。
然后使用相应的转换从该模型派生出 Hibernate 层和 DB 本身。
关于java - ORM建模: Database first vs classes first,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23952011/