答えて
これはチェック制約のみを使用して行うことはできませんが、here on my blogを示すように、マテリアライズドビューとチェック制約を使用する方法があります。あなたの例では、これは次のようになります。
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;
しかし、このアプローチは、その場合には、あなたがトリガーとチェック制約を使用するアプローチに加え、余分のために行くことができ、大規模な、忙しい本番データベースでのパフォーマンスではないかもしれませんemployees表の列:
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;
私は満足していません..私の要件は、最初の行程(テーブル作成中)で単純な制約が必要です...インサイドアウトアプローチ...行レベルでは不可能だと思いますか? –
あなたは正しいです:あなたの要件を満たすことができません。このルールを適用するための単純な制約を作成することは不可能です。 –
onedaywhenの答えの改訂版は、そのトリックを行う必要があります。 – Tripartio
は、新しいINTEGER NOT NULL列occurrence
を追加チェック制約occurrence BETWEEN 1 AND 3
を追加し、emp_id
とoccurrence
の化合物にユニーク制約を追加し、必要に応じてoccurrence
値を維持するために、ヘルパーprocsのを追加します。
- 1. 私のキャンバスの翻訳マトリックスにはどのように制限を設けることができますか?
- 2. SQLの別個の値
- 3. SQL Management StudioのSQL Expressの制限はどこで確認できますか?
- 4. NSNotificationのターゲットを制限することはできますか?
- 5. CSS3列をセレクタで個別にターゲティングすることはできますか?
- 6. SQLクエリからNone値を返すことを制限する
- 7. SQLの制限の合計と制限の列
- 8. javascript関数のスコープを制限することはできますか?
- 9. パンダ内の別の列に個別の値に対して1列に共通の値を見つける
- 10. SQL Server 2005でロール/ログインの接続数を制限することはできますか?
- 11. 列の既定値をSQL ServerのNewId()に設定することはできますか?
- 12. ArrayList 10個の値を保持するための制限
- 13. 個別の数値を集計する
- 14. 表示個別のカウント値ごとに別々の列が
- 15. Python XLSXWRITE作成できる列の数に制限はありますか?
- 16. セッション変数:制限値の設定とパフォーマンスへの影響
- 17. 列の値を制限する方法
- 18. 配列コレクションの値を制限する
- 19. R:{ggplot2}:方法/ facet_gridプロットのx軸の制限を個別に調整できますか?
- 20. SQL Serverの列を可能な値のリストに制限します。
- 21. DLL機能を制限することはできますか?
- 22. XMLスキーマは、その制限列挙値は一度だけ
- 23. SQL Serverの接続数の制限はありますか?
- 24. asp.netのdynamicfilterの値を変更/制限することは可能ですか?
- 25. ファイル入力の複数の要素から個々の値を削除することはできますか?
- 26. 年齢別に春のセキュリティセッションの有効期限を設定することはできますか?
- 27. Djangoのフォームインスタンスでchoicefieldを制限することはできますか?
- 28. 単一の列の個別値の数を単一の行に表示するSQLクエリ
- 29. 10個のフルネーム(複数の名前を持つ)と多くの制限を受け取ります
- 30. レベルファクタに関連する行の数を、別の変数の最大値で制限します。
代わりにトリガーを作成してみませんか? – Nonym
これは参考になるかもしれません:http://stackoverflow.com/questions/5522320/what-is-the-best-way-to-enforce-a-subset-relationship-with-integrity-constrain –