sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:hoe minimale kardinaliteit implementeren?

Er is geen manier om dit te specificeren met behulp van een CHECK-beperking, dus ik denk dat de beste aanpak een trigger is:

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

Je zou eindigen met iets als (ik heb het niet getest of zo):

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. Zoek in meerdere tabellen naar dezelfde waarde

  2. Hoe om te gaan met gelijktijdige invoegingen in DB die een overtreding van een regel voor de records in de database veroorzaken?

  3. Kan ik een optionele OUTPUT-parameter hebben in een opgeslagen procedure?

  4. Hoe een microseconde-precisie datetime in te voegen in mysql?