I'm documenting the different versions of database drawing styles.
this link shows how it looks like in a real diagram but my intention is to document only one side of the connection lines. Now the sample shows really perfectly how to draw and its done by chaining some PGF and TikZ code but I'm not able to rework it to a single line ending in Crow's Foot design line end. Like a 1:1 connection is this: -||--- it always also shows the other end as if its used within a diagram 1:1-1:1 like this -||------||-.
Maybe somebody can show me how to change the PGF code to get a single Crow's Foot? Here is my MWE:
\documentclass{article}%
\usepackage{tikz}
\usetikzlibrary{%
chains,
}
\tikzset{
dummy/.style={
rectangle,
rounded corners,
draw=white, very thick,
text centered},
zig zag to/.style={
to path={(\tikztostart) -| ($(\tikztostart)!#1!(\tikztotarget)$) |- (\tikztotarget) \tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
}
\makeatletter
\pgfarrowsdeclare{crow's foot}{crow's foot}
{
\pgfarrowsleftextend{+-.5\pgflinewidth}%
\pgfarrowsrightextend{+.5\pgflinewidth}%
}
{
\pgfutil@tempdima=0.6pt%
%\advance\pgfutil@tempdima by.25\pgflinewidth%
\pgfsetdash{}{+0pt}%
\pgfsetmiterjoin%
\pgfpathmoveto{\pgfqpoint{0pt}{-9\pgfutil@tempdima}}%
\pgfpathlineto{\pgfqpoint{-13\pgfutil@tempdima}{0pt}}%
\pgfpathlineto{\pgfqpoint{0pt}{9\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{0\pgfutil@tempdima}{0\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{-8pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-8pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-8pt}{6pt}}%
\pgfusepathqstroke%
}
\pgfarrowsdeclare{omany}{omany}
{
\pgfarrowsleftextend{+-.5\pgflinewidth}%
\pgfarrowsrightextend{+.5\pgflinewidth}%
}
{
\pgfutil@tempdima=0.6pt%
%\advance\pgfutil@tempdima by.25\pgflinewidth%
\pgfsetdash{}{+0pt}%
\pgfsetmiterjoin%
\pgfpathmoveto{\pgfqpoint{0pt}{-9\pgfutil@tempdima}}%
\pgfpathlineto{\pgfqpoint{-13\pgfutil@tempdima}{0pt}}%
\pgfpathlineto{\pgfqpoint{0pt}{9\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{0\pgfutil@tempdima}{0\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{0\pgfutil@tempdima}{0\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{-6pt}{-6pt}}%
\pgfpathcircle{\pgfpoint{-11.5pt}{0}} {3.5pt}
\pgfusepathqstroke%
}
\pgfarrowsdeclare{one}{one}
{
\pgfarrowsleftextend{+-.5\pgflinewidth}%
\pgfarrowsrightextend{+.5\pgflinewidth}%
}
{
\pgfutil@tempdima=0.6pt%
%\advance\pgfutil@tempdima by.25\pgflinewidth%
\pgfsetdash{}{+0pt}%
\pgfsetmiterjoin%
\pgfpathmoveto{\pgfqpoint{0\pgfutil@tempdima}{0\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{-6pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-6pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-6pt}{6pt}}%
\pgfpathmoveto{\pgfqpoint{0\pgfutil@tempdima}{0\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{-8pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-8pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-8pt}{6pt}}%
\pgfusepathqstroke%
}
\def\property#1{\node[name=\entityname-#1, every property/.try]{#1};}
\def\properties{\begingroup\catcode`\_=11\relax\processproperties}
\def\processproperties#1{\endgroup%
\def\propertycode{}%
\foreach \p in {#1}{%
\expandafter\expandafter\expandafter\gdef\expandafter\expandafter\expandafter\propertycode%
\expandafter\expandafter\expandafter{\expandafter\propertycode\expandafter\property\expandafter{\p}\\}%
}%
\propertycode%
}
\def\pk#1{\node[name=\entityname-#1, every property/.try]{#1};
\node[name=\entityname-#1, every property/.try, red, text width=1in, align=right,]{(PK)};
\\}
\def\fk#1{\node[name=\entityname-#1, every property/.try]{#1};
\node[name=\entityname-#1, every property/.try, red, text width=1in, align=right]{(FK)};
\\}
\begin{document}
\section{Notation Versions}
\begin{tabular}{lllll}
NOTATION & ==1 & 0 to 1 & 1 to n & n to n \\[1em]
IEM & & & & \\[1em]
CHEN & 1:1 & 0:1 & 1:n & 0:n \\[1em]
\end{tabular}\\[5em]
\scalebox{0.4}{
\begin{tikzpicture}
\node[dummy, inner sep=5pt] (a) {};
\node[dummy, inner sep=5pt,right=2cm of a] (b) {};
\draw[one to one] (a.east) -- node[above]{} (b.west);
\end{tikzpicture}
}
\scalebox{0.4}{
\begin{tikzpicture}
\node[dummy, inner sep=5pt] (a) {};
\node[dummy, inner sep=5pt,right=2cm of a] (b) {};
\draw[one to many] (a.east) -- node[above]{} (b.west);
\end{tikzpicture}
}
\scalebox{0.4}{
\begin{tikzpicture}
\node[dummy, inner sep=5pt] (a) {};
\node[dummy, inner sep=5pt,right=2cm of a] (b) {};
\draw[one to omany] (a.east) -- node[above]{} (b.west);
\end{tikzpicture}
}
\scalebox{0.4}{
\begin{tikzpicture}
\node[dummy, inner sep=5pt] (a) {};
\node[dummy, inner sep=5pt,right=2cm of a] (b) {};
\draw[many to one] (a.east) -- node[above]{} (b.west);
\end{tikzpicture}
}
\scalebox{0.4}{
\begin{tikzpicture}
\node[dummy, inner sep=5pt] (a) {};
\node[dummy, inner sep=5pt,right=2cm of a] (b) {};
\draw[many to many] (a.east) -- node[above]{} (b.west);
\end{tikzpicture}
}
\end{document}
After geting this part as one side i have a additional Question about this Crow's Foot drawing lines with PGF.
I need to add a line end that is not yet implemented. It is called 0 to 1 and lookes like this: -|O---
I tried to understand how the crow's Foot is drawn but i can't follow where it comes from. Can somebody show me the code where the three toe's of the crow's foot are drawn/coded?
Maybe then i can get a blend of "one" = -||--- and "omany" = /|\O---
This is the end product of this discussion for anybody whanting to do the same in future:
\documentclass{article} % say
\usepackage{tikz}
\usetikzlibrary{%
chains,
}
\tikzset{
dummy/.style={
rectangle,
rounded corners,
draw=white, very thick,
text centered},
zig zag to/.style={ %this is the connection of lines and nodes
to path={(\tikztostart) -| ($(\tikztostart)!#1!(\tikztotarget)$) |- (\tikztotarget) \tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
none to one/.style={
one-, zig zag to
},
none to oone/.style={
oone-, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
none to many/.style={
crow's foot-, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
none to omany/.style={
omany-, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
}
\makeatletter
\pgfarrowsdeclare{crow's foot}{crow's foot} %this is many
{
\pgfarrowsleftextend{+-.5\pgflinewidth}%
\pgfarrowsrightextend{+.5\pgflinewidth}%
}
{
\pgfutil@tempdima=0.6pt%
%\advance\pgfutil@tempdima by.25\pgflinewidth%
\pgfsetdash{}{+0pt}%
\pgfsetmiterjoin%
\pgfpathmoveto{\pgfqpoint{0pt}{-9\pgfutil@tempdima}}%
\pgfpathlineto{\pgfqpoint{-13\pgfutil@tempdima}{0pt}}%
\pgfpathlineto{\pgfqpoint{0pt}{9\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{0\pgfutil@tempdima}{0\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{-8pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-8pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-8pt}{6pt}}%
\pgfusepathqstroke%
}
\pgfarrowsdeclare{omany}{omany} %this is omany
{
\pgfarrowsleftextend{+-.5\pgflinewidth}%
\pgfarrowsrightextend{+.5\pgflinewidth}%
}
{
\pgfutil@tempdima=0.6pt%
%\advance\pgfutil@tempdima by.25\pgflinewidth%
\pgfsetdash{}{+0pt}%
\pgfsetmiterjoin%
\pgfpathmoveto{\pgfqpoint{0pt}{-9\pgfutil@tempdima}}%
\pgfpathlineto{\pgfqpoint{-13\pgfutil@tempdima}{0pt}}%
\pgfpathlineto{\pgfqpoint{0pt}{9\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{0\pgfutil@tempdima}{0\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{0\pgfutil@tempdima}{0\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{-6pt}{-6pt}}%
\pgfpathcircle{\pgfpoint{-11.5pt}{0}} {3.5pt}
\pgfusepathqstroke%
}
\pgfarrowsdeclare{one}{one} %this is one
{
\pgfarrowsleftextend{+-.5\pgflinewidth}%
\pgfarrowsrightextend{+.5\pgflinewidth}%
}
{
\pgfutil@tempdima=0.6pt%
%\advance\pgfutil@tempdima by.25\pgflinewidth%
\pgfsetdash{}{+0pt}%
\pgfsetmiterjoin%
\pgfpathmoveto{\pgfqpoint{0\pgfutil@tempdima}{0\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{-6pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-6pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-6pt}{6pt}}%
\pgfpathmoveto{\pgfqpoint{0\pgfutil@tempdima}{0\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{-8pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-8pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-8pt}{6pt}}%
\pgfusepathqstroke%
}
\pgfarrowsdeclare{oone}{oone}
{
\pgfarrowsleftextend{+-.5\pgflinewidth}%
\pgfarrowsrightextend{+.5\pgflinewidth}%
}
{
\pgfutil@tempdima=0.6pt%
%\advance\pgfutil@tempdima by.25\pgflinewidth%
\pgfsetdash{}{+0pt}%
\pgfsetmiterjoin%
\pgfpathmoveto{\pgfqpoint{0\pgfutil@tempdima}{0\pgfutil@tempdima}}%
\pgfpathmoveto{\pgfqpoint{-6pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-6pt}{-6pt}}%
\pgfpathlineto{\pgfqpoint{-6pt}{6pt}}%
\pgfpathcircle{\pgfpoint{-11.5pt}{0}} {3.5pt}
\pgfusepathqstroke%
}
\def\property#1{\node[name=\entityname-#1, every property/.try]{#1};}
\def\properties{\begingroup\catcode`\_=11\relax\processproperties}
\def\processproperties#1{\endgroup%
\def\propertycode{}%
\foreach \p in {#1}{%
\expandafter\expandafter\expandafter\gdef\expandafter\expandafter\expandafter\propertycode%
\expandafter\expandafter\expandafter{\expandafter\propertycode\expandafter\property\expandafter{\p}\\}%
}%
\propertycode%
}
\begin{document}
\section{Notation Versions}
\begin{tabular}{lllll}
NOTATION & ==1 & 0 to 1 & 1 to n & 0 to m \\[1em]%zeile 1
IEM / crow's foot%
& % == 1
\scalebox{0.5}{
\begin{tikzpicture}
\node[dummy, inner sep=5pt] (a) {};
\node[dummy, inner sep=5pt,right=1cm of a] (b) {};
\draw[none to one] (a.east) -- node[above]{} (b.west);
\end{tikzpicture}
} & % 0 to 1
\scalebox{0.5}{
\begin{tikzpicture}
\node[dummy, inner sep=5pt] (a) {};
\node[dummy, inner sep=5pt,right=1cm of a] (b) {};
\draw[none to oone] (a.east) -- node[above]{} (b.west);
\end{tikzpicture}
} & % 1 to n
\scalebox{0.5}{
\begin{tikzpicture}
\node[dummy, inner sep=5pt] (a) {};
\node[dummy, inner sep=5pt,right=1cm of a] (b) {};
\draw[none to many] (a.east) -- node[above]{} (b.west);
\end{tikzpicture}
} & % n to m
\scalebox{0.5}{
\begin{tikzpicture}
\node[dummy, inner sep=5pt] (a) {};
\node[dummy, inner sep=5pt,right=1cm of a] (b) {};
\draw[none to omany] (a.east) -- node[above]{} (b.west);
\end{tikzpicture}
}\\[1em]%zeile 2
CHEN & 1:1 & 0:1 & 1:n & 0:n \\[1em]%zeile 3
\end{tabular}\\[2em]
\end{document}


many to none/.style={ crow's foot-, zig zag to }" case, if I read your code correctly. – Clément Mar 18 '19 at 17:59