content/help/schema.mdDu 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
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.
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.
Was weißt du über einen Nutzer? Name, E-Mail, Registrierungsdatum. Das werden Spalten.
Pro Spalte zwei Entscheidungen:
text für Text, integer für Zahlen, timestamptz für Zeitpunkte, numeric für Geld.Kommt ein Wert nur einmal vor, etwa die E-Mail, setz zusätzlich U.
Ein Beitrag gehört zu einem Nutzer. posts braucht eine Spalte, die festhält, zu welchem:
posts eine Spalte author_id mit Typ integer anlegen.author_id fahren — am Rand erscheint ein Punkt.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?
⌘S oder Speichern. Das Schema landet in diagram/db/schema.dbml. Export erzeugt SQL.
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.
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.
Jedes ⓘ im Inspector erklärt die Einstellung daneben. Die Ansicht DBML zeigt dasselbe Schema als Text.