% Copyright 2019 by Till Tantau % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Free Documentation License. % % See the file doc/generic/pgf/licenses/LICENSE for more details. \section{Entity-Relationship Diagram Drawing Library} \begin{tikzlibrary}{er} This packages provides styles for drawing entity-relationship diagrams. \end{tikzlibrary} This library is intended to help you in creating E/R-diagrams. It defines only few new styles, but using the style |entity| instead of saying |rectangle,draw| makes the code more expressive. \subsection{Entities} The package defines a simple style for drawing entities: \begin{stylekey}{/tikz/entity} This style is to be used with nodes that represent entity types. It causes the node's shape to be set to a rectangle that is drawn and whose minimum size and width are set to sensible values. Note that this style is called |entity| despite the fact that it is to be used for nodes representing entity \emph{types} (the difference between an entity and an entity type is the same as the difference between an object and a class in object-oriented programming). If this bothers you, feel free to define a style |entity type| instead. % \begin{codeexample}[preamble={\usetikzlibrary{er,positioning}}] \begin{tikzpicture} \node[entity] (sheep) {Sheep}; \node[entity] (genome) [right=of sheep] {Genome}; \end{tikzpicture} \end{codeexample} % \end{stylekey} \begin{stylekey}{/tikz/every entity} This style is evoked by the style |entity|. To change the appearance of entities, you can change this style. % \begin{codeexample}[preamble={\usetikzlibrary{er,positioning}}] \begin{tikzpicture} [every entity/.style={draw=blue!50,fill=blue!20,thick}] \node[entity] (sheep) {Sheep}; \node[entity] (genome) [right=of sheep] {Genome}; \end{tikzpicture} \end{codeexample} % \end{stylekey} \subsection{Relationships} Relationships are drawn using styles that are very similar to the styles for entities. \begin{stylekey}{/tikz/relationship} This style works like |entity|, only it is to be used for relationships. Again, |relationship|s are actually relationship types. % \begin{codeexample}[preamble={\usetikzlibrary{er}}] \begin{tikzpicture} \node[entity] (sheep) at (0,0) {Sheep}; \node[entity] (genome) at (2,0) {Genome}; \node[relationship] at (1,1.5) {has} edge (sheep) edge (genome); \end{tikzpicture} \end{codeexample} % \end{stylekey} \begin{stylekey}{/tikz/every relationship} Works like |every entity|. % \begin{codeexample}[preamble={\usetikzlibrary{er}}] \begin{tikzpicture} [every entity/.style={fill=blue!20,draw=blue,thick}, every relationship/.style={fill=orange!20,draw=orange,thick,aspect=1.5}] \node[entity] (sheep) at (0,0) {Sheep}; \node[entity] (genome) at (2,0) {Genome}; \node[relationship] at (1,1.5) {has} edge (sheep) edge (genome); \end{tikzpicture} \end{codeexample} % \end{stylekey} \subsection{Attributes} \begin{stylekey}{/tikz/attribute} This style is used to indicate that a node is an attribute. To connect an attribute to its entity, you can use, for example, the |child| command or the |pin| option. % \begin{codeexample}[preamble={\usetikzlibrary{er}}] \begin{tikzpicture} \node[entity] (sheep) {Sheep} child {node[attribute] {name}} child {node[attribute] {color}}; \end{tikzpicture} \end{codeexample} % \begin{codeexample}[preamble={\usetikzlibrary{er}}] \begin{tikzpicture}[every pin edge/.style=draw] \node[entity,pin={[attribute]60:name},pin={[attribute]120:color}] {Sheep}; \end{tikzpicture} \end{codeexample} % \end{stylekey} \begin{stylekey}{/tikz/key attribute} This style is intended for key attributes. By default, the will cause the attribute to be typeset in italics. Typically, underlining is used instead, but that looks ugly and it is difficult to implement in \TeX. \end{stylekey} \begin{stylekey}{/tikz/every attribute} This style is used with every attribute, and therefore also for every key attribute. % \begin{codeexample}[preamble={\usetikzlibrary{er}}] \begin{tikzpicture} [text depth=1pt, every attribute/.style={fill=black!20,draw=black}, every entity/.style={fill=blue!20,draw=blue,thick}, every relationship/.style={fill=orange!20,draw=orange,thick,aspect=1.5}] \node[entity] (sheep) at (0,0) {Sheep} child {node [key attribute] {name}}; \node[entity] (genome) at (2,0) {Genome}; \node[relationship] at (1,1.5) {has} edge (sheep) edge (genome); \end{tikzpicture} \end{codeexample} % \end{stylekey} %%% Local Variables: %%% mode: latex %%% TeX-master: "pgfmanual-pdftex-version" %%% End: