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)
|
|
Please [control]-click to save the image or image link.
Show JSON text representation for the model.
"Flatten" the model (translating multivalued attributes).
{ }
{
"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"
}
]
}