Rohrleitungen modellieren

Ludwigmller

SQL-Guru
Beiträge
172
Ich möchte Rohrleitungen in postgres modellieren. Für eine Rohrleitungen sind verschiende Eigenschaften zu speichern wie Rohrtyp, gelegt am, entfernt am, Durchmesser. Eine Rohrleitung soll mindestens durch einen Punkt definiert sein. Es können aber auch mehrere Punkte sein. Es soll auch möglich sein, einen Punkt zusätzlich als Start- oder Entpunkt zu definieren.
Sollten alle Punkte als Tupel in einer separaten Relation Punkte definiert werden, oder als Array in einer Spalte von Relation Rohrleitungen?
 
Werbung:
Sehr gute Entscheidung, dass wir auch dich als neuen Rekruten in unserem Boot begrüßen dürfen, ich hoffe, dieser Post wird vieles beschreiben, dammit dir die Modellierung deiner Datenbank leichter fällt.

Ich würde, was ich aus deinem Threadpost lesen kann, in etwa so lösen, wo sic sogar die Stärke, je nachdem, ob der Innen- oder Außen-Radius entsprechend nach dem Rohmaterial, falls das bei euch vorher definiert wurde, automatisch.

hier eine Tabelle mit den Rohmaterialien (10mm Holzschraube oder 10mm Metallschraube und so weiter, ...)
Code:
create table materialien(id serial primary key, name text unique not null, stärke numeric unique not null);

hier eine Tabelle, wo die gewollten Rohre, welche womöglich Wasser leiten, mit 100mm Aßendurchmesser eingetragen werden können
Code:
create table rohre(innenradius numeric not null, aussenradius numeric not null, material integer references materialien(id) not null);

Hier wird eine Trigger-Procedure geschrieben, welche, je nachdem, ob der Außen oder innenradius des Rohres angegeben wird, abhängig vom grundmaterial den anderen Wert automatisch einfügt
Code:
create or replace function auto_stärke_radius() returns trigger as $$ begin
if (new.innenradius is not Null) then
new.aussenradius = new.innenradius+2*materialien.stärke from materialien 
where materialien.id = new.material; else if (new.aussenradius is not Null) then 
new.innenradius = new.aussenradius-2*materialien.stärke; else raise exception '';
 end if; end if; return new;  end; $$ language plpgsql;

Zu guterletzt muss nurnoch der Auslöser der Funktion dazugeschrieben werden
Code:
create trigger auto_stärke_radius before insert on rohre for each row execute procedure auto_stärke_radius();

Bei weiteren Fragen bist du gerne dazu eingeladen, hier einfach über einen weiteren Post in diesem Thread oder, falls unabhängig von dieser Fragestellunng bitte direkt in einen neuen Thread schreiben.
 
Werbung:
Sollten alle Punkte als Tupel in einer separaten Relation Punkte definiert werden, oder als Array in einer Spalte von Relation Rohrleitungen?
Intuitiv würde ich sagen ein Punkt = ein Eintrag in einer Tabelle mit Zuordnung zur Leitung. Ein Array ist ja nichts weiter als eine Tabelle und in deinem Fall wären die Arrays auch sehr unterschiedlich. Hängt aber davon ab, was du später mit den Informationen machen willst. Eventuell wäre auch PostGIS was für dich, habe ich allerdings noch nicht mit gearbeitet.
 
Zurück
Oben