sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL:Hvordan implementerer man minimumskardinalitet?

Der er ingen måde at specificere dette ved at bruge en CHECK-begrænsning, så jeg tror, ​​at den bedste tilgang er en trigger:

http://www.postgresql.org/docs/9.1/static /sql-createtrigger.html
http://www.postgresql.org/docs /9.1/static/plpgsql-trigger.html

Du ville ende med noget som (jeg har ikke testet det eller noget):

CREATE TRIGGER at_least_one before INSERT, UPDATE, DELETE ON the_one_table  FOR EACH ROW EXECUTE PROCEDURE check_at_least_one();

CREATE OR REPLACE FUNCTION check_at_least_one() RETURNS trigger AS $$
    BEGIN
    nmany := select count(*) from the_many_table where the_many_table.the_one_id=NEW.id;   
    IF nmany > 0 THEN 
        RETURN NEW;
    END IF;
    RETURN NULL;
END;


  1. PL/SQL-array til CLOB

  2. Udførelsesplanens indvirkning på ASYNC_NETWORK_IO Venter – Del 1

  3. LAG() / LEAD() af den næste rang (Postgresql)

  4. Sådan droppes fremmednøglebegrænsning i SQL Server-databasen - SQL Server / TSQL vejledning del 75