In einer View mehrere Datensätze zu einem machen?

Guten Tag,

ich bin gerade nicht sicher, ob ich einen totalen Knick im Hirn habe, oder es einfach nicht geht, deswegen meine Frage.

Mein Ergebnis soll so aussehen:
kundenid | kundenname | start_url | ziel_url
17… | Klaus…| http://www…… | http://www….

Mein erster Gedanken war.

  1. Kundentabelle -> id, kundenname
  2. Urltabelle, da sie sich wiederholen -> id, url
  3. Zuordnungstabelle -> kunde, url

somit bekomme ich allerdings für Klaus 2 Datensätze mit je einer Url, die ich nicht mehr als Start oder Ziel zuordnen kann, das nützt mir also gar nichts. Ich kann auch kein Flag für start/ziel setzen, da jede URL rein theoretisch mal Start, mal Ziel sein kann.

Gibt es also irgendeinen Weg, das ganze zusammen zu setzen? Momentan sehe ich nur noch, alle URLs als Strings in den Kunden zu packen, was natürlich extrem unsauber und redundant ist.

Vielen Dank schonmal im Vorraus.

Du hast in Deinem Design keine Info über Start und Ziel. PostgreSQL kann viel, aber

select start, ziel from glaskugel;

ist derzeit noch nicht möglich.

Was spricht dagegen, in der Zuordnungstabelle kunde, start-url, ziel-url zu speichern?


Andreas

Hallo Andreas!

Dann hab ich ja immernoch zwei Fremdschlüssel auf die gleiche Tabelle, also Constraint fk_url_start Foreign Key ( url_start ) references url (id)
Constraint fk_url_ziel Foreign Key ( url_ziel ) references url (id)
Was ja auch nicht geht, weil ich nicht joinen kann.
Aber inzwischen bin ich zu der Überlegung gekommen, dass ich dann eben 2 URL-Tabellen machen muss, die eine für Ursprungs-Urls, eie für Ziel-Urls. Dann hab ich die Daten zwar uU doppelt, aber es ist immernoch ökologischer als die anderen Ideen, die ich hatte.

Oder habe ich dich nicht verstanden?

Es mag logisch sein, sogar ökonomisch, aber auf keinen Fall ökologisch :wink:

Warum machst du an die Tabelle, die Kunde und URL verknüpft, nicht ein Feld, das zwischen Start und Ziel unterscheidet. Dann brauchst du keine 2 Tabellen und kannst per subselect beide Fälle unterscheiden?

Gruß Uwe

Möglich.

test=*# select * from kunde;
 id | name
----+------
  1 | du
  2 | er
  3 | sie
(3 rows)

test=*# select * from url;
 id | url
----+------
  1 | url1
  2 | url2
  3 | url3
  4 | url4
  5 | url5
(5 rows)

test=*# select * from zuord;
 kunde | start | ziel
-------+-------+------
     1 |     1 |    2
     2 |     2 |    1
     3 |     2 |    4
(3 rows)

test=*# select k.id, k.name, z.start, us.url as starturl, z.ziel, uz.url as zielurl from zuord z left join kunden k on (z.kunde=k.id) left join url us on (z.start=us.id) left join url uz on (z.ziel=uz.id);
 id |  name  | start | starturl | ziel | zielurl
----+--------+-------+----------+------+---------
  1 | kunde1 |     1 | url1     |    2 | url2
  2 | kunde2 |     2 | url2     |    1 | url1
  3 | kunde3 |     2 | url2     |    4 | url4
(3 rows)

Andreas

OMG! Wie peinlich :astonished: Ich meinte ÖkoNOMISCH, aber das kann jetzt jeder behaupten :wink:

Also auf jeden Fall vielen Dank für eure Hilfe und die Mühe, das sieht sehr gut aus, also hatte ich wirklich einen Knick im Hirn.