Create and edit a conceptual model

This page allows the viewing and creation of a conceptual model diagram
representing an object model or a database schema.

The diagramming conventions are related to those used by Martin Fowler in
Analysis Patterns: Reusable Object Models with some changes.

This demo requires javascript and the HTML canvas feature.
It will not work on browsers without javascript enabled and a conformant canvas implementation.

Please click on the canvas to start.

Load Empty Schema.
Load drinker/beer/bars data model
Load supplier/parts data model
Load WordPress data model (abbreviated)
Load MySQL information schema data model (abbreviated)
	If you see this message you are using a browser that
	does not support the HTML 5 Canvas feature.  Please
	install/enable canvas support or use another browser
	that supports the Canvas feature, such as recent version of
	     Firefox, Safari, or Chrome.
	This demo requires the canvas feature.

Please [control]-click to save the image or image link.

Show JSON text representation for the model.

"Flatten" the model (translating multivalued attributes).

mouse event prompt will be displayed here
{    }
{
    "Supplier": [ 
        {"name":"snum","typeName": "int", "isIdentifier":true} ,
        {"name": "sname", "typeName":"str"},
        {"name": "sphone", "typeName":"str"}
        ],
    "Part": [ 
        {"name":"pnum","typeName": "int", "isIdentifier":true} ,
        {"name":"pname","typeName": "str"},
        {"name":"color","typeName": "str"}
        ],
    "Ships": [ 
        {"name":"shipper","typeName": "Supplier", "isIdentifier":true} , 
        {"name":"product","typeName": "Part", "isIdentifier":true} , 
        {"name":"quantity","typeName": "int"}
        ]
    }
{    }
{
    "Drinker": [ 
        {"name":"dname","typeName": "str", "isIdentifier":true} ,
        {"name": "birthday", "typeName":"date"},
        {"name": "phone", "typeName":"str"}
        ],
    "Bar": [ 
        {"name":"barName","typeName": "str", "isIdentifier":true} ,
        {"name":"address","typeName": "str"}
        ],
    "Beer": [ 
        {"name":"beerName","typeName": "str", "isIdentifier":true} , 
        {"name":"calories","typeName": "int"}
        ],
    "Likes": [
        {"name":"drinker", "typeName":"Drinker"},
	{"name":"beer", "typeName":"Beer"}
        ],
    "Serves": [
        {"name":"bar", "typeName":"Bar"},
	{"name":"beer", "typeName":"Beer"}
        ],
    "Frequents": [
        {"name":"drinker", "typeName":"Drinker"},
	{"name":"bar", "typeName":"Bar"}
        ]
    }
{
"comment" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "num",
      "typeName" : "int"
      },
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "onPost",
      "typeName" : "post"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "karma",
      "typeName" : "int"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "content",
      "typeName" : "text"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "byuser",
      "typeName" : "user"
      }
   ],
"link" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "url",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : false,
      "isMultiple" : true,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "related",
      "typeName" : "term"
      }
   ],
"post" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "id",
      "typeName" : "bigint"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "content",
      "typeName" : "longtext"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "author",
      "typeName" : "user"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : false,
      "isMultiple" : true,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "hasterm",
      "typeName" : "term"
      }
   ],
"postmeta" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "post",
      "typeName" : "post"
      },
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "key",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "value",
      "typeName" : "str"
      }
   ],
"term" : [
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "word",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "description",
      "typeName" : "text"
      }
   ],
"user" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "id",
      "typeName" : "bigint"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "pass",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "nicename",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "email",
      "typeName" : "str"
      }
   ],
"usermeta" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "user",
      "typeName" : "user"
      },
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "key",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "value",
      "typeName" : "str"
      }
   ]
}
{
"characterSet" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "name",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "description",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "maxlen",
      "typeName" : "int"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "hasDefault",
      "typeName" : "collation"
      }
   ],
"collation" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "characterSet",
      "typeName" : "characterSet"
      },
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "name",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "isDefault",
      "typeName" : "bool"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "sortlen",
      "typeName" : "int"
      }
   ],
"columnPriviledges" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "grantee",
      "typeName" : "str"
      },
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "column",
      "typeName" : "columns"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "priviledge",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "grantable",
      "typeName" : "str"
      }
   ],
"columns" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "table",
      "typeName" : "tables"
      },
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "name",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "position",
      "typeName" : "int"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "default",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "nullable",
      "typeName" : "bool"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "data_type",
      "typeName" : "str"
      }
   ],
"indexed" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "indexname",
      "typeName" : "str"
      },
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "column",
      "typeName" : "columns"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "unique",
      "typeName" : "bool"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "nullable",
      "typeName" : "bool"
      }
   ],
"keyUsage" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "column",
      "typeName" : "columns"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "refColumn",
      "typeName" : "columns"
      },
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "name",
      "typeName" : "str"
      }
   ],
"schemata" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "name",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "default_char_set",
      "typeName" : "characterSet"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "sqlPath",
      "typeName" : "str"
      }
   ],
"tableConstraint" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "table",
      "typeName" : "tables"
      },
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "name",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "constraintType",
      "typeName" : "str"
      }
   ],
"tablePriviledges" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "grantee",
      "typeName" : "str"
      },
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "table",
      "typeName" : "tables"
      },
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "priviledge",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "grantable",
      "typeName" : "bool"
      }
   ],
"tables" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "scheme",
      "typeName" : "schemata"
      },
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "name",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "type",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "sortedBy",
      "typeName" : "collation"
      }
   ],
"trigger" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "scheme",
      "typeName" : "schemata"
      },
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "name",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "object",
      "typeName" : "tables"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "order",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "condition",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "statement",
      "typeName" : "str"
      }
   ],
"view" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : true,
      "isOnto" : false,
      "name" : "table",
      "typeName" : "tables"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "definition",
      "typeName" : "str"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "checkOption",
      "typeName" : "bool"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "updateable",
      "typeName" : "bool"
      }
   ]
}
{
"Dept" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "dnum",
      "typeName" : "int"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : false,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "mgr",
      "typeName" : "Emp"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : false,
      "isMultiple" : true,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "report",
      "typeName" : "Emp"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "name",
      "typeName" : "str"
      }
   ],
"Emp" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "enum",
      "typeName" : "int"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "category",
      "typeName" : "Status"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : false,
      "isMultiple" : true,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "activity",
      "typeName" : "Proj"
      }
   ],
"Proj" : [
   {
      "isIdentifier" : true,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "pnum",
      "typeName" : "int"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "lead",
      "typeName" : "Emp"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "partOf",
      "typeName" : "Proj"
      },
   {
      "isIdentifier" : false,
      "isMandatory" : true,
      "isMultiple" : false,
      "isOneToOne" : false,
      "isOnto" : false,
      "name" : "within",
      "typeName" : "Dept"
      }
   ],
"Status" : [
   {
      "isIdentifier" : true,
      "name" : "category",
      "typeName" : "str"
      },
   {
      "name" : "minsalary",
      "typeName" : "currency"
      },
   {
      "name" : "maxsalary",
      "typeName" : "currency"
      }
   ]
}

REFERENCES