Abfrage als Fremdschlüssel

Ich entwerfe gerade mit Access eine Art Chemie-Datenbank, die später nach PostGreSQL konvertiert werden soll. Folgendes Problem:

In einer Tabelle “Stoffe” werden Stoffe definiert:
Spalte 1: Stoffname
Spalte 2: Kategorie

Es gibt drei Kategorien. Ich nennen sie einfach mal primär, sekundär, tertiär.

Jetzt kommen zwei weitere struktur-identische Tabellen (“Reaktionen1”, “Reaktionen2”), die sich von ihrem Inhalt her nur darin unterscheiden, dass in ihnen zwei unterschiedliche Arten von Reaktionen abgelegt werden.

  1. Art (“Reaktionen1”): Reaktionen nur zwischen Stoffen der Kategorie “primär” (die Produkte dieser Reaktionen sind “sekundär”)
  2. Art (“Reaktionen2”): Reaktionen mit Stoffen, die der Kategorie “primär” oder “sekundär” angehören (die Produkte dieser Reaktionen sind tertiär)

In beiden Fällen darf die Datenbank also nur ganz bestimmte Einträge aus der Tabelle “Stoffe” zulassen. Diese Information steht mir aber erst nach einer Abfrage zur Verfügung. Um interne Konsistenz zu gewährleisten, wäre es also notwendig, einen Fremdschlüssel zu definieren, der Ergebnis einer Abfrage ist, und nicht Bestandteil einer Tabelle.

Ist so etwas mit PostGreSQL denkbar. oder muss ich das später über ein Interface zur Datenbank regeln?

Eine einfache Lösung bestünde natürlich darin, einfach drei verschiedene Stoff-Tabellen zu definieren. Aber wie stelle ich dann sicher, dass jeder Stoff nur einmal vorkommt, entweder in der ersten ODER der zweiten ODER der dritten Stoff-Tabelle?

Eremit

Ich denke, das sollte mit einem Trigger machbar sein, der bei INSERT / UPDATE das prüft.


Andreas

Hmm… geht das etwas genauer? Kannst Du mir einen Link geben, wo ich weiter lesen kann?
Eremit

Andreas

Ahhh… sehr guter Link! Vielen Dank :slight_smile:
Eremit