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
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
to jedynie trigger
Constraintem się nie da. Poza tym mi to wygląda na zły design bazy...
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 ...:/
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ę.
ale constraint nie spełnia tego warunku i nie możliwe jest aby wartość się powtórzyła
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');
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.