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

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search for
  Advanced Search

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

Privacy Policy | PostgreSQL Archives hosted by Command Prompt, Inc. | Designed by tinysofa
Copyright © 1996 – 2008 PostgreSQL Global Development Group