Postgresql constraint

0

Witam

Mam encje group która zawiera kilka pól które są fk.

resource_id ,
member_id,
department_id

jak ustawić constraint który będzie patrzył że jedna ale tylko 1 z wartości musi być ustawiona ??

i nie możliwe jest aby wartość się powtórzyła

0

to jedynie trigger

0

Constraintem się nie da. Poza tym mi to wygląda na zły design bazy...

0
Shalom napisał(a):

Constraintem się nie da. Poza tym mi to wygląda na zły design bazy...

Też się zgodzę :) Jednak trzeba tak zostawić i zapewnić ograniczenie ...:/

0

Jak przeczytałem to też pomyślałem o triggerze ale z ciekawości zaglądnąłem do dokumentacji PostgreSQL i niby jest możliwość ustawienia constraint dla tabeli.

-- kod z dokumentacji
CREATE TABLE distributors (
    did     integer,
    name    varchar(40)
    CONSTRAINT con1 CHECK (did > 100 AND name <> '')
);

Mogę się mylić ale ustawienie constraint byłoby o tyle lepsze od triggera, że w momencie dodania go do tabeli otrzyma się informację czy wszystkie rekordy spełniają constraint. Trigger działał by chyba dopiero dla nowych rekordów, chyba że wymusimy jego odpalenie/sprawdzenie integralności bazy - ale tutaj niekoniecznie muszę mieć rację.

0

ale constraint nie spełnia tego warunku i nie możliwe jest aby wartość się powtórzyła

0

Constraint na sprawdzenie, czy tylko jedna:

ALTER TABLE tabela1 ADD CHECK (replace((resource_id is null)::char || (member_id is null)::char || (department_id is null)::char, 't','')='f');
0
abrakadaber napisał(a):

ale constraint nie spełnia tego warunku i nie możliwe jest aby wartość się powtórzyła

Od tego jest UNIQUE a nie trigger czy constraint.

1 użytkowników online, w tym zalogowanych: 0, gości: 1