This parser reads ER diagrams definition files, and produces two types of diagrams + SQL code.
[Graphviz](https://www.graphviz.org/) is used on server side to translate parsed graph descriptions into SVG objects.
-**TODO** list:
-
- - functional integrity constraints (CIF),
- - inter-relations constraints (or, and, xor...),
- - inheritance with the right symbol (triangle).
-
-*Note:* temporary dependency to [underscore](http://underscorejs.org/); good library but used so far only for its shuffle() method.
-
-----
An entity is defined as follow
Note that the "drawMcd" method can take a second argument, which indicates the type of graph.
* "bubble" draws the standard graph, as seen [here](https://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#/media/File:ER_Diagram_MMORPG.png) for example
* "compact" (default) use the same box for an entity and its attributes
+
+-----
+
+**TODO** list:
+
+ - functional integrity constraints (CIF)
+ - inter-relations constraints (or, and, xor...)
+ - inheritance with the right symbol (triangle)
+ - put online somewhere (user enter graph description and get SVG + SQL)
+
+*Implementation note:* temporary dependency to [underscore](http://underscorejs.org/); good library but used so far only for its shuffle() method.
// attributes: ArrayOf {name, [isKey], [type], [qualifiers]}
parseAttributes(lines, start, end)
{
- let attributes = [];
+ let attributes = [ ];
for (let i=start; i<end; i++)
{
let field = { };
a.entities.forEach( e2 => {
if (e2.name == e.name)
return;
- e2.attributes.forEach( attr => {
+ this.entities[e2.name].attributes.forEach( attr => {
if (attr.isKey)
{
this.tables[e.name].push({
});
});
// Add relationship potential own attributes
- a.attributes.forEach( attr => {
+ (a.attributes || [ ]).forEach( attr => {
newTable.fields.push({
name: attr.name,
isKey: false,