Advertisement
Guest User

Untitled

a guest
Aug 20th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.58 KB | None | 0 0
  1. documentclass[border=0.25in]{standalone}
  2.  
  3. usepackage{tikz}
  4. usetikzlibrary{shapes.multipart}
  5. usetikzlibrary{matrix}
  6. usetikzlibrary{positioning}
  7. usetikzlibrary{shadows}
  8. usetikzlibrary{calc}
  9.  
  10. makeatletter
  11. pgfarrowsdeclare{crow's foot}{crow's foot}
  12. {
  13. pgfarrowsleftextend{+-.5pgflinewidth}%
  14. pgfarrowsrightextend{+.5pgflinewidth}%
  15. }
  16. {
  17. pgfutil@tempdima=0.5pt%
  18. advancepgfutil@tempdima by.25pgflinewidth%
  19. pgfsetdash{}{+0pt}%
  20. pgfsetmiterjoin%
  21. pgfpathmoveto{pgfqpoint{0pt}{-6pgfutil@tempdima}}%
  22. pgfpathlineto{pgfqpoint{-6pgfutil@tempdima}{0pt}}%
  23. pgfpathlineto{pgfqpoint{0pt}{6pgfutil@tempdima}}%
  24. pgfusepathqstroke%
  25. }
  26.  
  27.  
  28. tikzset{
  29. entity/.code={
  30. tikzset{
  31. label=above:#1,
  32. name=#1,
  33. inner sep=0pt,
  34. every entity/.try,
  35. fill=white,
  36. general shadow={
  37. shadow xshift=0.0625in,
  38. shadow yshift=-0.0625in,
  39. opacity=0.5,
  40. fill=black!50
  41. }
  42. }%
  43. defentityname{#1}%
  44. },
  45. entity anchor/.style={matrix anchor=#1.center},
  46. every entity/.style={
  47. draw,
  48. },
  49. every property/.style={
  50. inner xsep=0.25cm, inner ysep=0.125cm, anchor=west, text width=1in
  51. },
  52. zig zag to/.style={
  53. to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget)}
  54. },
  55. zig zag to/.default=0.5,
  56. one to many/.style={
  57. -crow's foot, zig zag to
  58. },
  59. many to one/.style={
  60. crow's foot-, zig zag to
  61. },
  62. many to many/.style={
  63. crow's foot-crow's foot, zig zag to
  64. }
  65. }
  66. defproperty#1{node[name=entityname-#1, every property/.try]{#1};}
  67. defproperties{begingroupcatcode`_=11relaxprocessproperties}
  68. defprocessproperties#1{endgroup%
  69. defpropertycode{}%
  70. foreach p in {#1}{%
  71. expandafterexpandafterexpandaftergdefexpandafterexpandafterexpandafterpropertycode%
  72. expandafterexpandafterexpandafter{expandafterpropertycodeexpandafterpropertyexpandafter{p}\}%
  73. }%
  74. propertycode%
  75. }
  76.  
  77. begin{document}
  78.  
  79. begin{tikzpicture}[every node/.style={font=ttfamily}, node distance=1.25in]
  80. matrix [entity=Class] {
  81. properties{
  82. classkey,
  83. class_type,
  84. class_desc
  85. }
  86. };
  87.  
  88. matrix [entity=Product, right=of Class-classkey, entity anchor=Product-classkey] {
  89. properties{
  90. classkey,
  91. prodkey,
  92. prod_name,
  93. pkg_type
  94. }
  95. };
  96.  
  97. matrix [entity=Sales, right=of Product-classkey, entity anchor=Sales-classkey] {
  98. properties{
  99. perkey,
  100. classkey,
  101. prodkey,
  102. prod_name,
  103. storekey,
  104. promokey,
  105. quantity,
  106. dollars
  107. }
  108. };
  109.  
  110. matrix [entity=Period, right=of Sales-perkey, entity anchor=Period-perkey] {
  111. properties{
  112. perkey,
  113. date,
  114. day,
  115. week,
  116. month,
  117. qtr,
  118. year
  119. }
  120. };
  121.  
  122. matrix [entity=Promotion, below=of Period, entity anchor=Promotion-promokey] {
  123. properties{
  124. promokey,
  125. promo_type,
  126. promo_desc,
  127. value,
  128. start_date,
  129. end_date
  130. }
  131. };
  132.  
  133. matrix [entity=Store, below=of Product, entity anchor=Store-storekey] {
  134. properties{
  135. storekey,
  136. mktkey,
  137. store_type,
  138. store_name,
  139. street,
  140. city,
  141. state,
  142. zip
  143. }
  144. };
  145.  
  146. matrix [entity=Market, left=of Store-mktkey, entity anchor=Market-mktkey] {
  147. properties{
  148. mktkey,
  149. hq_city,
  150. hq_state,
  151. district,
  152. region
  153. }
  154. };
  155.  
  156. draw [one to many] (Class-classkey) to (Product-classkey);
  157. draw [one to many] (Product-classkey) to (Sales-classkey);
  158. draw [one to many] (Product-prodkey) to (Sales-prodkey);
  159. draw [many to one] (Sales-perkey) to (Period-perkey);
  160. draw [one to many] (Market-mktkey) to (Store-mktkey);
  161. draw [many to one] (Sales-storekey) to (Store-storekey);
  162. draw [many to one] (Sales-promokey) to (Promotion-promokey);
  163.  
  164. end{tikzpicture}
  165.  
  166. end{document}
  167.  
  168. pgfdeclarearrow{
  169. name = ErdMany,
  170. parameters = {
  171. thepgfarrowlength
  172. },
  173. setup code = {
  174. % End values
  175. pgfarrowssettipend{pgfarrowlength}
  176. pgfarrowssetbackend{0pt}
  177. pgfarrowssetlineend{pgfarrowlength}
  178. pgfarrowssetvisualbackend{pgfarrowlength}
  179. % Convex hull
  180. pgfarrowshullpoint{0pt}{0pt}
  181. pgfarrowshullpoint{pgfarrowlength}{pgfarrowlength}
  182. pgfarrowshullpoint{pgfarrowlength}{-pgfarrowlength}
  183. % Save
  184. pgfarrowssavethepgfarrowlength
  185. },
  186. drawing code = {
  187. pgfpathmoveto{pgfqpoint{pgfarrowlength}{0.5pgfarrowlength}}
  188. pgfpathlineto{pgfqpoint{0pt}{0pt}}
  189. pgfpathlineto{pgfqpoint{pgfarrowlength}{-0.5pgfarrowlength}}
  190. pgfusepathqstroke
  191. },
  192. defaults = { length = 10pt }
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement