こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

同時アクセス

例えば
bigCategory,midleCategoryテーブルがあり、(今回はmiddleCategoryがbigCategoryときーでつながっている)

create table bigCategory
(
num integer not null primary key,
name varchar(20) not null,
);
insert into bigCategory values(0,'category_1');
insert into bigCategory valuers(1,'category_2');

create table middleCategory
(
num integer not null primary key,
name varchar(20) not null,
bigkey integer not null
);
insert into middleCategory values(0,'middle_1',0);
insert into middleCategory values(1,'middle_2',1);

bigCategoryの変更・削除をするときに、
1)middleCategoryがselectされている
→ 変更不可
2)middleCategoryがselectされていない
→変更・削除可能

3)また、middleCategoryはselectされてなくて、
bigCategoryテーブルの変更行が他からselectされていたら、変更・削除不可

といった状況を実現したいのですが、可能なのでしょうか?
候補として、おもうはGRANTかな、と思ったりはするのですが。

いろいろ考えはするのですが、解決策が思いつかず質問させてもらいました。

宜しくお願いします。

投稿日時 - 2009-09-27 14:29:31

QNo.5322941

困ってます

質問者が選んだベストアンサー

再質問の意味が分かりません。
参照整合性は例えばBigに"A","B","C"しかないなら、Midには"D"とか
作れないということですし、Midに"A"がある時はBigの"A"を削除でき
ないということです。実際に参照されているかいないかはクエリを
実行しないと分かりません。それと、参照整合を設定していない項目は
変更可能です。これも含めて更新不可能にしたいというのであれば、
やり方を考え直す必要があります。

投稿日時 - 2009-09-30 11:49:18

お礼

回答ありがとうございます。
>それと、参照整合を設定していない項目は
変更可能です。これも含めて更新不可能にしたいというのであれば、
やり方を考え直す必要があります。
ひとまず現段階では、むずかしいので、参照整合性の方法だけで
実行するようにします。

ありがとうございました。

投稿日時 - 2009-10-18 00:08:56

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

外部キー制約を設定すれば良いのでは?
http://www.postgresql.jp/document/pg734doc/user/ddl-constraints.html#DDL-CONSTRAINTS-FK

投稿日時 - 2009-09-28 16:46:34

補足

回答ありがとうございます。
確認してみました。

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以下では、できないのでしょうか?

宜しくお願いします。

投稿日時 - 2009-09-29 22:16:26

あなたにオススメの質問