Helpcenter

Schema bauencontent/help/schema.md

Du zeichnest den Bauplan deiner Datenbank: welche Tabellen es gibt, welche Felder sie haben und wie sie zusammenhängen. Es werden keine echten Daten gespeichert. Am Ende steht diagram/db/schema.dbml im Repository. Daraus kannst du SQL erzeugen.

Siehe auch: Sequenz bauen · Lasttest · Dateien

In fünf Schritten zum Schema

1. Sammle die Dinge, die du speichern willst

Schreib in normalen Worten, worum es geht: „Ein Nutzer schreibt Beiträge. Ein Beitrag hat Tags."

Die Hauptwörter sind deine Tabellen: users, posts, tags.

2. Leg die Tabellen an

Oben auf Tabelle klicken. Jede neue Tabelle bekommt eine id als Primary Key. Die kannst du so lassen.

Benenne die Tabelle im Inspector rechts um.

3. Füge die Eigenschaften als Spalten hinzu

Was weißt du über einen Nutzer? Name, E-Mail, Registrierungsdatum. Das werden Spalten.

Pro Spalte zwei Entscheidungen:

  • Welcher Typ? text für Text, integer für Zahlen, timestamptz für Zeitpunkte, numeric für Geld.
  • Muss sie ausgefüllt sein? Dann NN. Ergibt ein Nutzer ohne diesen Wert Sinn? Ohne E-Mail nicht → NN. Ohne Profilbild schon → kein NN.

Kommt ein Wert nur einmal vor, etwa die E-Mail, setz zusätzlich U.

4. Verbinde die Tabellen

Ein Beitrag gehört zu einem Nutzer. posts braucht eine Spalte, die festhält, zu welchem:

  1. In posts eine Spalte author_id mit Typ integer anlegen.
  2. Im Diagramm über die Zeile author_id fahren — am Rand erscheint ein Punkt.
  3. Von dort auf die Zeile id in users ziehen.

Die Richtung ist wichtig. Die Spalte liegt bei der Seite, von der es mehrere gibt. Viele Beiträge pro Nutzer → author_id liegt bei posts. Der Pfeil zeigt von der Tabelle mit dem Verweis zur Tabelle, auf die verwiesen wird.

In welche Richtung du ziehst, spielt keine Rolle. Ist eine Spalte Primary Key oder Unique, richtet das Tool den Pfeil.

Danach die Relation anklicken und ON DELETE setzen: Was passiert mit den Beiträgen, wenn der Nutzer gelöscht wird?

5. Speichern

⌘S oder Speichern. Das Schema landet in diagram/db/schema.dbml. Export erzeugt SQL.

Der Fall „viele zu vielen"

Ein Beitrag hat mehrere Tags, ein Tag hängt an mehreren Beiträgen. Das geht nicht als direkte Linie. Du brauchst eine Tabelle dazwischen:

post_tags
  post_id   integer   →  posts.id
  tag_id    integer   →  tags.id

Setz bei beiden Spalten PK. Dann kann dasselbe Tag nicht zweimal am selben Beitrag hängen.

Die vier häufigsten Fehler

Geld als float oder real. Die rechnen ungenau. Nimm numeric(10,2).

Fremdschlüssel ohne Index. PostgreSQL legt keinen Index für Fremdschlüssel an. Trag bei author_id unter Indizes einen nach.

Alles nullable. Setz NN, wo ein leerer Wert keinen Sinn ergibt.

Listen in ein Textfeld. tags als "reise,essen,foto" ist nicht durchsuchbar. Das gehört in eine eigene Tabelle.

Wenn du nicht weiterkommst

Jedes im Inspector erklärt die Einstellung daneben. Die Ansicht DBML zeigt dasselbe Schema als Text.