Commit | Line | Data |
---|---|---|
525c4d2a BA |
1 | # erdiag: Entity-Relationship Diagrams Generator |
2 | ||
3 | Inspired by [this repository](https://code.google.com/archive/p/merisier/). | |
4 | ||
5 | This parser reads ER diagrams definition files, and produces two types of diagrams + SQL code. | |
6 | [Graphviz](https://www.graphviz.org/) is used on server side to translate parsed graph descriptions into SVG objects. | |
7 | ||
525c4d2a BA |
8 | ----- |
9 | ||
10 | An entity is defined as follow | |
fe021b27 | 11 | |
bf4fc3ed BA |
12 | [Entity] |
13 | #attr1 (*) | |
14 | attr2 (*) | |
fe021b27 | 15 | |
525c4d2a BA |
16 | with (\*) = optional SQL indications, and # denoting a (part of) a key. |
17 | ||
18 | A relationship is defined in this way | |
fe021b27 | 19 | |
bf4fc3ed BA |
20 | {Relation} |
21 | Entity C1 | |
22 | Entity2 C2 | |
23 | -- | |
24 | attr1 (*) | |
25 | attr2 (*) | |
fe021b27 | 26 | |
525c4d2a BA |
27 | where attributes are optional, and C1 (resp. C2) = cardinality for entity 1 (resp. 2). |
28 | Defining relationships with more than two attributes is easy: just add entities. | |
29 | Cardinality dictionary: | |
30 | * \* = 0..n | |
fe021b27 | 31 | * \+ = 1..n |
525c4d2a BA |
32 | * 1 = 1..1 |
33 | * ? = 0..1 | |
34 | ||
19addd10 BA |
35 | Special cardinalities are also available to indicate relative identification: `?R` and `1R`. |
36 | ||
7a80e6db BA |
37 | And, in case of a self-relationship, symbols '>' and '<' can indicate the sense, as in |
38 | ||
39 | {manage} | |
40 | Users *> | |
41 | Users 1< | |
42 | ||
525c4d2a | 43 | To mark a weak entity, just surround its name by extra-brackets |
fe021b27 | 44 | |
525c4d2a | 45 | [[WeakEntity]] |
fe021b27 | 46 | |
525c4d2a | 47 | In the same way, a weak relation can be written |
fe021b27 | 48 | |
525c4d2a | 49 | {{WeakRelation}} |
fe021b27 | 50 | |
525c4d2a BA |
51 | The syntax for these two last is then the same as in the non-weak versions. |
52 | ||
53 | To indicate an inheritance relation, proceed as follow | |
fe021b27 | 54 | |
bf4fc3ed BA |
55 | is_a |
56 | Animal Cat Fish | |
57 | Planet Mars Venus | |
525c4d2a | 58 | |
3ca1e50c | 59 | Finally, blocks must be separated by new lines. For a usage example, see example.html (it should render as seen in example\_\*.svg) |
525c4d2a BA |
60 | |
61 | Note that the "drawMcd" method can take a second argument, which indicates the type of graph. | |
62 | * "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 | |
63 | * "compact" (default) use the same box for an entity and its attributes | |
5fe4fa10 BA |
64 | |
65 | ----- | |
66 | ||
67 | **TODO** list: | |
68 | ||
69 | - functional integrity constraints (CIF) | |
70 | - inter-relations constraints (or, and, xor...) | |
71 | - inheritance with the right symbol (triangle) | |
72 | - put online somewhere (user enter graph description and get SVG + SQL) | |
73 | ||
74 | *Implementation note:* temporary dependency to [underscore](http://underscorejs.org/); good library but used so far only for its shuffle() method. |