Hallo alle zusammen,

ich schreibe einen Praxisbericht im Rahmen meines Studiums in LaTeX.
Darin erstelle ich ein Datenmodell (vergleichbar mit dem angehängten Datenbankschema und ER-Modell) zu einer Ordner- und Berechtigungsstruktur. Um solche Strukturen allgemein zu erstellen gibt es Tools wie http://fabforce.net/dbdesigner4/. Allerdings besitzen die Tools, die ich kenne, keine Möglichkeit, das in LaTeX zu "übersetzen".
Ich habe gesehen, dass sich das im Prinzip mit TikZ umsetzen lässt, allerdings habe ich bisher nur gesehen, dass man per Hand die einzelnen Bestandteile zeichnen muss.
Gibt es irgendein Tool, das Datenbankschemata oder ER-Diagramme erstellen kann? Gibt es alternativ ein Tool, das sozusagen verbundene Tabellen wie unten schnell und einfach für LaTeX erstellen und visualisieren kann? Es wäre schön, wenn ich die Linien dann, wie unten, noch beschriften könnte und die Linien einfach dynamischen mit diesen Tabellen verknüpft werden, d.h. dass ich als Position die jeweilige Tabelle angeben kann statt Positionen in Millimeter oder Pixel.

Ich habe in http://www.golatex.de/viewtopic.php?p=58752#58752 schon ein Frage gestellt und da wurde mir empfohlen hier im Forum nachzufragen :-)

Schonmal vielen Dank!

LG

alt text

Dieser Frage ist "Community Wiki" markiert.

gefragt 22 Mär '14, 22:51

tt33tt's gravatar image

tt33tt
256131925
Akzeptiert-Rate: 100%

bearbeitet 23 Mär '14, 16:01


Hier ist ein Vorschlag, bei dem die Tabellen jeweils als matrix erstellt und mit der positioning Bibliothek relativ zueinander plaziert werden. Jede Tabelle bekommt dabei einen Namen, wie zum Beispiel A. Dadurch wird auch jede einzelne Zelle der Tabellen automatisch mit <matrixname>-<zeile>-<spalte> benannt. Zum Beispiel steht „Artikel“ in der Tabellenzelle bzw. dem Knoten mit dem Namen A-1-1.

Open in writeLaTeX
\documentclass[margin=5mm]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{matrix,positioning}

\tikzset{
  tab/.style={inner sep=0pt,
    nodes={inner sep=.333em,
      % notwendig für leere Zellen und Unterlängen:
      minimum height={\baselineskip+0.666em}
    }
  },
  vtab/.style={matrix of nodes,tab,
    row sep=-\pgflinewidth,column sep=-\pgflinewidth,
    nodes in empty cells,% leere Zellen werden ebenfalls gezeichnet
    nodes={draw,align=left,text width=#1}
  },
  vtab/.default=3cm,% voreingestellte Breite
  htab/.style={matrix of nodes,draw,tab,anchor=north west},
  every edge/.append style={font=\footnotesize\strut,inner ysep=.1em},
  pfeil/.style={out=270,in=90,->}
}

\begin{document}
\begin{tikzpicture}[thick,
  % vertikaler und horizontaler Abstand zwischen den Tabellen:
  node distance=1cm and 2.5cm, 
]
% Tabellen
  \matrix(A)[vtab]{Artikel\\{Artikelnummer\newline Artikelname}\\\\};
  % für matrix P reichen 2cm als Breite
  \matrix(P)[right= of A,vtab=2cm]{Position\\Anzahl\\\\};
  \matrix(B)[right= of P,vtab]{Bestellung\\{Bestellnummer\newline Bestelldatum}\\\\};
  \matrix(K)[below= of B,vtab]{Kunde\\{Kundennummer\newline Name}\\\\};
% Verbindungen einzeichnen und beschriften
    \path(A)edge
      node[pos=0,above right]{besitzt}node[pos=0,below right]{1}
      node[pos=1,above left]{gehört zu}node[pos=1,below left]{N}
      (P);
    \path(P)edge
      node[pos=0,above right]{gehört zu}node[pos=0,below right]{N}
      node[pos=1,above left]{besitzt}node[pos=1,below left]{1}
      (B);
    \path(B)edge
      node[pos=0,below left]{gehört zu}node[pos=0,below right]{N}
      node[pos=1,above left]{gibt auf}node[pos=1,above right]{1}
      (K);
%
% horizontale Tabellen
  \matrix(a)[htab]at(A.west|-K.south){Artikelnummer&Artikelname\\};
  \matrix(p)[below=of a.south west,htab]{Artikelnummer&Bestellnummer& Anzahl\\};
  \matrix(b)[below=of p.south west,htab]{ Bestellnummer&Kundennummer&Bestelldatum\\};
  \matrix(k)[below=of b.south west,htab]{Kundennummer& Name\\};
% Beschriftung der Tabellen
  \foreach \t/\bez in {a/Artikel,p/Position,b/Bestellung,k/Kunde}
    \node[above right=0pt of \t.north west,text=black!70]{\bez};
% Verbindungen einzeichnen
  % Pfeile enden um xshift in x-Richtung verschoben am Nordanker des Zielknotens.
  % Verschiebung ist notwendig, damit die Pfeile nicht über der Beschriftung liegen.
  \path[pfeil,<-](a-1-1)edge([xshift=.6cm]p-1-1.north);
  \path[pfeil](p-1-2)edge([xshift=.6cm]b-1-1.north);
  \path[pfeil](b-1-2)edge([xshift=.6cm]k-1-1.north);
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 23 Mär '14, 04:43

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

bearbeitet 23 Mär '14, 15:36

Genial und danke! Scheint ja richtig leicht zu sein :-) Jetzt habe ich nur noch drei Verständnisfragen: Bei pathpfeil,<-edge([xshift=.6cm]p-1-1.north); bedeutet north sicherlich, dass an der Oberseite der Matrix angesetzt wird? Ist xshift die Entfernung zwischen den Matrizen? Dann frage ich mich allerdings, was es mit x und y bei dem Shift auf sich hat. Bei matrix(p)[below=of a.south west,htab]{Artikelnummer&Bestellnummer& Anzahl\}; und bei matrix(a)[htab]at(A.west|-K.south){Artikelnummer&Artikelname\}; was bedeutet south und west? Könnt ihr mir noch ein Wiki empfehlen? LG

(23 Mär '14, 15:11) tt33tt

@tt33tt Betrachte das hier wie ein Wiki im Aufbau. Stelle neue Fragen, und es wächst dadurch. ;-) Elke hat oben noch Erklärendes hinzugefügt, sah ich gerade.

(23 Mär '14, 15:47) stefan ♦♦

@tt33tt: Oben habe ich ein paar zusätzliche Kommentare zur Erklärung eingefügt.

Der Anker north eines rechteckigen Knotens bezeichnet den Punkt in der Mitte der oberen Kante. Du kannst dazu gern eine neue Frage stellen.

(23 Mär '14, 15:50) esdd

OK, dann vielen Dank! Werde eine neue Frage zu [below=of a.south west,htab] stellen.

(23 Mär '14, 16:03) tt33tt
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×728
×254
×2
×1

gestellte Frage: 22 Mär '14, 22:51

Frage wurde gesehen: 14,187 Mal

zuletzt geändert: 23 Mär '14, 16:03