%% Last Modified: Wed Oct 31 00:10:15 2007.

\documentclass{article}

\usepackage{tikz}
\usepackage{weiwER}  %% enhanced ER diagram drawing support based on pgf's ER library


\begin{document}



%% Example Figures
Illustrating all the features.

\begin{tikzpicture} %[ampersand replacement=\&] % to be used inside another environment
  % matrix
  \matrix[row sep=1cm, column sep=2cm] {
    \entity{loan}{Loan}       & \idrelationship{has}{Has} & \weakentity{payment}{Payment} \\
    \relationship{owns}{Owns} &                           &                               \\
    \entity{branch}{Branch}   &                           & \relationship{test}{Test}     \\
  };
  % relationships
  \buildrelationship{has}{loan}{(0,1)}{payment}{(1,1)}
  \buildrelationship{owns}{loan}{(1,1)}{branch}{(0,n)}
  % have to simulate ternary relationship
  \buildrelationship{test}{loan}{}{branch}{} % no need to specify minmax for ternary relationships
  \addrelationship{test}{payment}{} % no need to specify minmax for ternary relationships
  % attributes for entities
  \pkattrib{loan}{180}{loanID}{20}
  \attrib{loan}{140}{amount}{20}
  \mvattrib{loan}{100}{multiVal}{20}
  \dvattrib{loan}{50}{derived}{20}
  % 
  \ptattrib{payment}{0}{seq\_no}{20}
  % attributes for relationships
  \attrib{test}{0}{dummy}{20}
\end{tikzpicture}


Draw the ER diagram step by step.
\begin{enumerate}
\item Identify all the entity sets.

\begin{center}
  \scalebox{.9}{
    \begin{tikzpicture}[ampersand replacement=\&] % to be used inside another environment
      % matrix
      \matrix[row sep=0.6cm, column sep=2cm] {
        \entity{patient}{Patient} \&  \& \entity{consultant}{Consultant} \\
         \&  \& \entity{drug}{Drug} \\[.6cm]
        \entity{ward}{Ward} \&  \& \entity{nurse}{Nurse} \\
        \&   \\
      };
    \end{tikzpicture}
  }
\end{center}

\item Identify all the relationship sets (identify all the min-max
  constraints if possible)

\begin{center}
  \scalebox{.9}{
    \begin{tikzpicture}[ampersand replacement=\&] % to be used inside another environment
      % matrix
      \matrix[row sep=0.6cm, column sep=2cm] {
        \entity{patient}{Patient} \& \relationship{attend}{Attend} \& \entity{consultant}{Consultant} \\
        \relationship{in}{In} \& \relationship{treat}{Treatment} \& \entity{drug}{Drug} \\[.6cm]
        \entity{ward}{Ward} \& \relationship{on}{On} \& \entity{nurse}{Nurse} \\
        \& \relationship{head}{Head}  \\
      };
      %% relationships
      \buildrelationship{attend}{patient}{(0, n)}{consultant}{(0,m)}
      \buildrelationship{in}{patient}{(1, 1)}{ward}{(0,n)}
      % 
      \buildrelationship{treat}{patient}{}{drug}{}
      \addrelationship{treat}{nurse}{}
      % 
      \buildrelationship{on}{ward}{(1, n)}{nurse}{(0, 1)}
      \buildrelationship{head}{ward}{(1, 1)}{nurse}{(0, 1)}
    \end{tikzpicture}
  }
\end{center}

\item Add all the attributes (make sure they don't overlap with each
  other).
\begin{center}
  \scalebox{.9}{
    \begin{tikzpicture}[ampersand replacement=\&] % to be used inside another environment
      % matrix
      \matrix[row sep=0.6cm, column sep=2cm] {
        \entity{patient}{Patient} \& \relationship{attend}{Attend} \& \entity{consultant}{Consultant} \\
        \relationship{in}{In} \& \relationship{treat}{Treatment} \& \entity{drug}{Drug} \\[.6cm]
        \entity{ward}{Ward} \& \relationship{on}{On} \& \entity{nurse}{Nurse} \\
        \& \relationship{head}{Head}  \\
      };
      %% relationships
      \buildrelationship{attend}{patient}{(0, n)}{consultant}{(0,m)}
      \buildrelationship{in}{patient}{(1, 1)}{ward}{(0,n)}
      % 
      \buildrelationship{treat}{patient}{}{drug}{}
      \addrelationship{treat}{nurse}{}
      % 
      \buildrelationship{on}{ward}{(1, n)}{nurse}{(0, 1)}
      \buildrelationship{head}{ward}{(1, 1)}{nurse}{(0, 1)}
      %% attributes
      \pkattrib{patient}{180}{pid}{20}
      \attrib{patient}{113}{DOB}{20}
      \cattrib{patient}{40}{name}{20}{name}
      \attrib{name}{145}{fname}{12}
      \attrib{name}{35}{lname}{12}
      % 
      \pkattrib{consultant}{120}{name}{16}
      \attrib{consultant}{60}{phone}{16}
      % 
      \pkattrib{drug}{30}{code}{20}
      \attrib{drug}{0}{brandname}{25}
      \attrib{drug}{330}{dosage}{20}
      % 
      \pkattrib{ward}{180}{name}{20}
      % 
      \pkattrib{nurse}{20}{number}{20}
      \attrib{nurse}{340}{name}{20}
      % 
      \attrib{treat}{180}{time}{20}
      \attrib{treat}{210}{dosage}{20}
    \end{tikzpicture}
  }
\end{center}
\end{enumerate}

Yet another example.

\begin{center}
  \scalebox{.7}{  
    \begin{tikzpicture}[ampersand replacement=\&] % to be used inside another environment
      %% matrix
      \matrix[row sep=0.6cm, column sep=1.5cm] {
        \entity{specialty}{Specialty}  \& \relationship{has1}{Has1} \& \entity{doctor}{Doctor} \& \&  \\
        \relationship{has2}{Has2} \& \relationship{confirm}{Confirm} \& \relationship{assign}{Assign} \& \relationship{examine}{Further\_Examine} \&  \\
        \entity{ward}{Ward} \& \relationship{in}{In} \& \weakentity{admission}{Admission} \&  \idrelationship{has5}{Has5} \& \entity{patient}{Patient} \\
        \&  \& \relationship{recommend}{Recommend} \& \idrelationship{has3}{Has3} \& \idrelationship{has4}{Has4} \\
        \& \& \entity{gp}{GP} \& \weakentity{test}{Test} \& \weakentity{treatment}{Treatment} \\
      };
      %% relationships
      \buildrelationship{has1}{specialty}{(0,n)}{doctor}{(0,m)}
      \buildrelationship{has2}{specialty}{(0,n)}{ward}{(1,1)}
      \buildrelationship{has5}{admission}{(1,1)}{patient}{(0,n)}
      \buildrelationship{confirm}{doctor}{(0,n)}{admission}{(1,1)}
      \buildrelationship{recommend}{gp}{(0,n)}{admission}{(1,1)}
      \buildrelationship{in}{ward}{(0,n)}{admission}{(1,1)}
      \buildrelationship{assign}{doctor}{(0,n)}{admission}{(1,1)}
      \buildrelationship{examine}{doctor}{(0,n)}{admission}{(0,1)}
      \buildrelationship{has4}{admission}{(0,n)}{treatment}{(1,1)}
      \buildrelationship{has3}{test}{(1,1)}{admission}{(0,n)}
      %% attributes
      \ptattrib{admission}{215}{time}{20}
      \pkattrib{specialty}{90}{name}{17}
      \pkattrib{ward}{270}{name}{20}
      \pkattrib{doctor}{120}{did}{20}
      \attrib{doctor}{60}{name}{20}
      \pkattrib{gp}{240}{gpID}{20}
      \attrib{gp}{300}{name}{20}
      \pkattrib{patient}{40}{pid}{30}
      \attrib{patient}{15}{name}{30}
      \attrib{patient}{350}{DOB}{30}
      \attrib{patient}{325}{address}{30}
      \ptattrib{test}{240}{date}{20}
      \attrib{test}{270}{description}{30}
      \attrib{test}{300}{result}{20}
      \ptattrib{treatment}{240}{date}{20}
      \attrib{treatment}{270}{description}{30}
      \attrib{treatment}{300}{result}{20}
    \end{tikzpicture}
  }
\end{center}


\end{document}