Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-de-allgemein by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group