sql >> Databáze >  >> RDS >> Oracle

Mohu mít omezení na počet různých hodnot ve sloupci v SQL?

To nelze provést pouze pomocí kontrolního omezení, ale existuje způsob použití materializovaného pohledu a kontrolního omezení, jak demonstruji zde na mém blogu . Pro váš příklad by to bylo:

create materialized view emp_dep_mv
build immediate
refresh complete on commit as
select emp_id, count(*) cnt
from relatives
group by emp_id;

alter table emp_dep_mv
add constraint emp_dep_mv_chk
check (cnt <= 3)
deferrable;

Tento přístup však nemusí být výkonný ve velké, zaneprázdněné produkční databázi, v takovém případě byste mohli zvolit přístup, který používá spouštěče a kontrolní omezení a navíc sloupec v tabulce zaměstnanců:

alter table employees add num_relatives number(1,0) default 0 not null;

-- Populate for existing data
update employees
set num_relatives = (select count(*) from relatives r
                     where r.emp_id = e.emp_id)
where exists (select * from relatives r
              where r.emp_id = e.emp_id);

alter table employees add constraint emp_relatives_chk
check (num_relatives <= 3);

create trigger relatives_trg
after insert or update or delete on relatives
for each row
begin
   if inserting or updating then
      update employees
      set    num_relatives = num_relatives + 1
      where  emp_id = :new.emp_id;
   end if;
   if deleting or updating then
      update employees
      set    num_relatives = num_relatives - 1
      where  emp_id = :old.emp_id;
   end if;
end;


  1. generovat vybrané možnosti pomocí polí php

  2. Jaký je nejlepší způsob, jak zkontrolovat duplicitní pole TEXT v MYSQL/PHP?

  3. PostgreSQL:Vytvořte tabulku, pokud neexistuje AS

  4. Jak mohu zadat jedinečné omezení pro více sloupců v MySQL?