{"id":7,"date":"2009-07-08T17:24:37","date_gmt":"2009-07-09T00:24:37","guid":{"rendered":"https:\/\/www.zacwitte.com\/?p=7"},"modified":"2009-07-08T17:24:37","modified_gmt":"2009-07-09T00:24:37","slug":"summary-of-free-graphical-data-modeling-tools","status":"publish","type":"post","link":"https:\/\/zacwitte.com\/?p=7","title":{"rendered":"Summary of Free Graphical Data Modeling Tools"},"content":{"rendered":"<div>\n<div>\n<div>\n<div>\n<p><strong>The  Goal:<\/strong> To graphically design a relational data model and  generate both DDL to create the DB structure and the PHP5 class  structure including public\/private member variables and getters,  setters, update, create, delete with working DB link. Icing on the cake  would be if the data model could be updated graphically after generating  the code and generate a patch file for updating the PHP5 code and an  SQL script with the appropriate alter\/add\/drop commands to update the  existing schema.<\/p>\n<h3>Eclipse Frameworks<\/h3>\n<p>Eclipse has a complex collection of various layers of frameworks,  some seem a little redundant or aren\u2019t immediately clear what  functionality they provide. Most of these frameworks are in \u201cincubation\u201d  phase. There are also proprietary plugins that utilize these frameworks  but are not distributed using the official eclipse repositories. The  frameworks serve simply as platforms to aid development of functional  plugins primarily by third parties. The Eclipse project itself doesn\u2019t  provide any implemented solutions except for UML2Tools which is a  component of the MDT.<\/p>\n<p>The eclipse modeling project consists of the following:<\/p>\n<ul>\n<li><strong>Eclipse  Modeling Framework Project (EMF)<\/strong> \u2013 (<a href=\"http:\/\/eclipse.org\/modeling\/emf\/\" target=\"_blank\" rel=\"noopener\">link<\/a>) The EMF project is a  modeling framework and code generation facility for building tools and  other applications based on a structured data model. From a model  specification described in XMI, EMF provides tools and runtime support  to produce a set of Java classes for the model, along with a set of  adapter classes that enable viewing and command-based editing of the  model, and a basic editor.<\/li>\n<li><strong>Model  Development Tools (MDT)<\/strong> \u2013 (<a href=\"http:\/\/eclipse.org\/modeling\/mdt\/\" target=\"_blank\" rel=\"noopener\">link<\/a>) The Model Development  Tools (MDT) project focuses on big \u201cM\u201d modeling within the Modeling  project. Its purpose is twofold: To provide an implementation of  industry standard metamodels. To provide exemplary tools for developing  models based on those metamodels.\n<ul>\n<li><strong>UML2Tools<\/strong> (<a href=\"http:\/\/wiki.eclipse.org\/MDT-UML2\" target=\"_blank\" rel=\"noopener\">link<\/a>) is a set of GMF-based  editors for viewing and editing UML models. It is an optional component  of the MDT project. It does not provide entity relationship modeling so  I\u2019m not going to say much more about it.<\/li>\n<\/ul>\n<\/li>\n<li><strong>The Eclipse  Graphical Modeling Framework (GMF)<\/strong> (<a href=\"http:\/\/eclipse.org\/modeling\/gmf\/\" target=\"_blank\" rel=\"noopener\">link<\/a>) provides a generative  component and runtime infrastructure for developing graphical editors  based on EMF and GEF. The project aims to provide these components, in  addition to exemplary tools for select domain models which illustrate  its capabilities.<\/li>\n<li>The\u00a0<strong>Graphical  Editing Framework (GEF)<\/strong> (<a href=\"http:\/\/eclipse.org\/gef\/\" target=\"_blank\" rel=\"noopener\">link<\/a>) allows developers to create a  rich graphical editor from an existing application model. GEF consists  of 2 plug-ins. The org.eclipse.draw2d plug-in provides a layout and  rendering toolkit for displaying graphics. The developer can then take  advantage of the many common operations provided in GEF and\/or extend  them for the specific domain. GEF employs an MVC (model-view-controller)  architecture which enables simple changes to be applied to the model  from the view.GEF is completely application neutral and provides the  groundwork to build almost any application, including but not limited  to: activity diagrams, GUI builders, class diagram editors, state  machines, and even WYSIWYG text editors. The Logic Example, one of the  provided examples, is pictured below<\/li>\n<\/ul>\n<h3>Free Standalone and Plugin Implementations<\/h3>\n<p><strong>Clay Database Modeling<\/strong><\/p>\n<p>Clay (<a href=\"http:\/\/www.azzurri.jp\/en\/clay\/index.html\" target=\"_blank\" rel=\"noopener\">link<\/a>) is an Eclipse  plugin by Azzurri, a Japanese company. The free version provides nearly  all features needed to build a proper ERD. The Pro version give support  for enterprise databases, printing and exporting images, and document  generation. Clay exports clean DDL code for mysql. It can also reverse  engineer databases.<\/p>\n<p>Conclusion: This is a decent choice. It won\u2019t lock you into using it.  It doesn\u2019t generate an interface for the application layer so it  doesn\u2019t fulfill the goal of this study.<\/p>\n<p><strong>RISE<\/strong><\/p>\n<p>RISE (<a href=\"http:\/\/www.risetobloome.com\/\" target=\"_blank\" rel=\"noopener\">link<\/a>)  is a freemium, proprietary, Windows only solution, but it does some  good stuff. RISE is the only free solution I\u2019ve found that will generate  both the data layer and the application layer based on an entity  relationship diagram. It has one of the easier to use interfaces for  creating entities, attributes, relations, and views. The stereotypes  concept makes building common structures such as trees, lists,  classifications, and extensions easier. Connecting a customizable  Interface to an entity or view allows C# or PHP code to be generated,  giving your application layer access to the data layer. The application  code fully implements methods that perform standard operations on your  data layer. RISE will even generate a SOAP web service interface and  provides an AJAX framework.<\/p>\n<p>Despite all that praise, there are a few problems with RISE (not  including it being windows only, etc). There doesn\u2019t seem to be a way to  create indexes, primary keys, auto-incremented values, or adjust the  precision on data types.<\/p>\n<p>What RISE generates is not proper DDL or a database that actually  reflects your ERD. It produces a stored procedure that creates four  tables for keeping track of the log and model versions in addition to  the actual entity tables. This is presumably so it can gracefully  upgrade the structure to a new version without loosing data but it  results in an unclean database.<\/p>\n<p>Conclusion: RISE may be a good choice for some applications but the  fact that it doesn\u2019t follow standards makes me disqualify it for lack of  extensibility if you should ever decide to stop using \u00a0 it.<\/p>\n<p><strong>ArgoUML<\/strong><\/p>\n<p>ArgoUML (<a href=\"http:\/\/argouml.tigris.org\/\" target=\"_blank\" rel=\"noopener\">link<\/a>)  is an open source, standalone UML and code generating application  written in Java and maintained by Tigris.org, the same group that does  subversion. It doesn\u2019t support modeling database schemas out of the box,  but it does have an officially supported plugin that does so called  argouml-db. As of this writing the latest argouml-db plugin isn\u2019t  supported in the latest build of ArgoUML so you\u2019ll need to get the  bundled version from the sourceforge site  https:\/\/sourceforge.net\/projects\/dbuml.<\/p>\n<p>My impressions is that the db plugin is a hacked together job and  isn\u2019t very well maintained. It\u2019s tricky to even get running, clumsy to  add attributes to a table. The properties also doesn\u2019t have basic  options that you would expect as part of a DDL such as length of columns  or auto_increment functions or null \/ not null. Generating the code  from the bundled version gives the option of generic \u201cSQL\u201d and java. The  sql didn\u2019t work out of the box and the generated file only contained an  error. The java code didn\u2019t include any getters, setters, or link to  the database. Instead of primitive data types the generated java code  imported types.sql.VARCHAR and similar.<\/p>\n<p>Conclusion: not worth anyone\u2019s time for ERDs<\/p>\n<p><strong>Umbrello<\/strong><\/p>\n<p>Umbrello (<a href=\"http:\/\/uml.sourceforge.net\/\" target=\"_blank\" rel=\"noopener\">link<\/a>)  is an open source application that is part of the KDE project, which is  primarily targeted at linux distributions. Getting the latest Umbrello  working on mac and windows can be a bit more of a pain. Macports and  Fink as package managers for Mac and both have up-to-date versions of  most mainstream linux software. You can compile from source most of KDE  including Umbrello. It might be something you want to do overnight.  Expect to encounter errors which you\u2019ll have to find your way around.  Needless to say, this is not a user-friend installation in non-linux  environments.<\/p>\n<p>Umbrello does a decent job of modeling relational databases (entity  relationship model) and includes all expected features including data  types and properties, auto-increment, foreign key constraints, etc. It  does a fairly solid job of generating mysql or postgresql DDL, but it  won\u2019t export the data model to php. You\u2019ll have to create a separate  class diagram for that.<\/p>\n<p>Conclusion: if you run linux this is a decent option considering the  alternatives.<\/p>\n<h3>Non-free solutions<\/h3>\n<ul>\n<li>MySQL Workbench 5.1 \u2013  $99 \u2013 <a href=\"http:\/\/www.mysql.com\/products\/workbench\" target=\"_blank\" rel=\"noopener\">http:\/\/www.mysql.com\/products\/workbench<\/a><\/li>\n<li>DeZine V5 \u2013 $245 to  $745 \u2013 <a href=\"http:\/\/www.datanamic.com\/order\/index_am.html\" target=\"_blank\" rel=\"noopener\">http:\/\/www.datanamic.com\/order\/index_am.html<\/a>\n<ul>\n<li>Handles schema  versioning and can generate update script (expert version only)<\/li>\n<\/ul>\n<\/li>\n<li>Visual Paradigm \u2013 $59  to $1399 <a href=\"http:\/\/www.visual-paradigm.com\/\" target=\"_blank\" rel=\"noopener\">http:\/\/www.visual-paradigm.com<\/a>\n<ul>\n<li>Database Visual  Architect eclipse plugin \u2013 $399 to $699<\/li>\n<li>Very powerful,  enterprise solution, does it all<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>Conclusions<\/h3>\n<p>This is a relatively uncrowded market for robust solutions. The only  two tools found that satisfy the core requirements of my goal are Visual  Paradigm\u2019s Database Visual Architect, the enterprise level proprietary  solution and in a somewhat broken way, RISE, the free solution. No other  tools produce both data and application layer code. I discount RISE for  not keeping with standard methods and not producing extensible, clean  code. I discount DB Visual Architect for it\u2019s prohibitive cost in  non-enterprise environments.<\/p>\n<p>My chosen solution is the Clay Database Modeling plugin for eclipse,  which does a good job of modeling and exporting DDL for the data layer.  The application layer will need to be designed and implemented  separately.<\/p>\n<p>Comments are welcome on these solutions or any others not included.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The Goal: To graphically design a relational data model and generate both DDL to create the DB structure and the PHP5 class structure including public\/private member variables and getters, setters, update, create, delete with working DB link. Icing on the cake would be if the data model could be updated graphically after generating the code [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-7","post","type-post","status-publish","format-standard","hentry","category-tech"],"_links":{"self":[{"href":"https:\/\/zacwitte.com\/index.php?rest_route=\/wp\/v2\/posts\/7","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zacwitte.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zacwitte.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zacwitte.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zacwitte.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7"}],"version-history":[{"count":0,"href":"https:\/\/zacwitte.com\/index.php?rest_route=\/wp\/v2\/posts\/7\/revisions"}],"wp:attachment":[{"href":"https:\/\/zacwitte.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zacwitte.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zacwitte.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}