| 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: | Whole Thread | Raw Message | 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
| 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 |