Do not add extra 'NOT NULL' when irrelevant
[erdiag.git] / README.md
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
8 -----
9
10 An entity is defined as follow
11
12 [Entity]
13 #attr1 (*)
14 attr2 (*)
15
16 with (\*) = optional SQL indications, and # denoting a (part of) a key.
17
18 A relationship is defined in this way
19
20 {Relation}
21 Entity C1
22 Entity2 C2
23 --
24 attr1 (*)
25 attr2 (*)
26
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
31 * \+ = 1..n
32 * 1 = 1..1
33 * ? = 0..1
34
35 Special cardinalities are also available to indicate relative identification: `?R` and `1R`.
36
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
43 To mark a weak entity, just surround its name by extra-brackets
44
45 [[WeakEntity]]
46
47 In the same way, a weak relation can be written
48
49 {{WeakRelation}}
50
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
54
55 is_a
56 Animal Cat Fish
57 Planet Mars Venus
58
59 Finally, blocks must be separated by new lines. For a usage example, see example.html (it should render as seen in example\_\*.svg)
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
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.