Re: Check Constraint mit Subselect

From: Olaf Radicke <olaf_rad(at)gmx(dot)de>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Check Constraint mit Subselect
Date: 2008-03-10 14:12:39
Message-ID: 200803101512.39360.olaf_rad@gmx.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Am Montag 10 März 2008 11:46:06 schrieb Thomas Guettler:
> Hallo,
>
> Check Constraints können keine Subselects enthalten.
>
> Wie kann ich dann sicherstellen, dass es bei einer 1:N Beziehung, N
> nicht Null sein darf.
> Es muss also mindestens einen Datensatz geben.
>
> Beispiel: Zu einer Rechnung muss es immer Rechnungspositionen geben.

START TRANSACTION;

CREATE TABLE rechnung (
id SERIAL PRIMARY KEY,
empfaenger TEXT NOT NULL,
kontoverbindung TEXT NOT NULL,
abteilung TEXT NOT NULL,
date TIMESTAMP NOT NULL
);

CREATE TABLE leistung (
id SERIAL PRIMARY KEY,
titel TEXT NOT NULL,
ergaenzung TEXT NOT NULL,
betrag DECIMAL NOT NULL
);

-- Keine Rechnungsposten ohne (Leistungs-)Empfänger oder Leistung...

CREATE TABLE rechnungs_posten (
rechnung_id INTEGER REFERENCES rechnung (id) NOT NULL,
leistung_id INTEGER REFERENCES leistung (id) NOT NULL
);

-- Rechnungsstellung...

SELECT SUM(betrag) FROM leistung
WHERE
id IN
(
SELECT leistung_id FROM rechnungs_posten
WHERE
rechnung_id =
( SELECT id FROM rechnung WHERE empfaenger = 'Musterma, Peter')
);

-- Geht aber nur wenn eine Leistung pro Rechnung vorkommen darf.
-- Ansonsten wird die Abfrage etwas umgestellt...
COMMIT;

Fazit: Tabellen-Design überdenken.

Gruß

Olaf

In response to

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message A. Kretschmer 2008-03-11 07:44:55 Re: Check Constraint mit Subselect
Previous Message A. Kretschmer 2008-03-10 11:15:06 Re: Check Constraint mit Subselect