- ベストアンサー
同時アクセス制限とテーブル連携の制御
- 大カテゴリと中カテゴリのテーブルを連携させる際に、同時アクセス制限をかけたい場合の解決策はありますか?
- 変更や削除操作を行う際、中カテゴリが選択されている場合は変更ができない制御を実現したいです。
- また、中カテゴリが選択されておらず、大カテゴリの変更行が他から選択されている場合も変更や削除をできないようにしたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
再質問の意味が分かりません。 参照整合性は例えばBigに"A","B","C"しかないなら、Midには"D"とか 作れないということですし、Midに"A"がある時はBigの"A"を削除でき ないということです。実際に参照されているかいないかはクエリを 実行しないと分かりません。それと、参照整合を設定していない項目は 変更可能です。これも含めて更新不可能にしたいというのであれば、 やり方を考え直す必要があります。
その他の回答 (1)
- nda23
- ベストアンサー率54% (777/1415)
外部キー制約を設定すれば良いのでは? http://www.postgresql.jp/document/pg734doc/user/ddl-constraints.html#DDL-CONSTRAINTS-FK
補足
回答ありがとうございます。 確認してみました。 create table bigCategory ( num integer not null, primary key(num) ); alter table bigCategory add name varchar(10) REFERENCES middleCategory(key); insert into bigCategory values(0,'Bigger'); create table middleCategory ( num integer not null, name varchar(20) not null, key varchar(10) not null, primary key(num) ); alter table middleCategory add bigKey integer REFERENCES bigCategory (num); insert into middleCategory values(0,'test',0,' '); create table middleCategory ( num integer not null, name varchar(20) not null, key varcha(10) not null, primary key(num) ); alter table middleCategory add bigKey integer REFERENCES bigCategory (num); という状態までは、何とかできたのですが、 この時、references以下で、not existsとかのように、指定する値が設定されているかどうかをreferences以下では、できないのでしょうか? 宜しくお願いします。
お礼
回答ありがとうございます。 >それと、参照整合を設定していない項目は 変更可能です。これも含めて更新不可能にしたいというのであれば、 やり方を考え直す必要があります。 ひとまず現段階では、むずかしいので、参照整合性の方法だけで 実行するようにします。 ありがとうございました。