Re: Check Constraint mit Subselect
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
Home |
Main Index |
Thread Index