0

posgresql を使用するプロジェクトで継承されたテーブルを使用しています。

そんな感じ :

create table root
(
    id bigserial,
    some_data text,
    ...
);

create table leaf_a
(
    data2 text
) inherits(root);

create table leaf_b
(
    maybe_other_data text
) inherits(root);

これまでのところ、すべてがうまく機能しています。

しかし、最近、leaf_a と leaf_b で使用される場合に 1 対 1 の関係であるテーブルを追加したので、そのように作成しました。

create table conf
(
    id bigserial,
    root_id bigint,
    more_data text
);

ここまでは順調ですが、今度は制約を作成したいと思います:

alter table conf
    add constraint plop foreign key (root_id) references root (id);

Postgres では、制約を作成できます。

だから私はいくつかのデータを追加します:

insert into leaf_a (some_data, data2) values ('...', '...');

生成された ID (ルート テーブルからの ID) が 42 であるとしましょう。テーブル conf にデータを追加します。

insert into conf (root_id, more_data) values (42, '...');

ここに問題があります。postgres は、テーブルルートに id = 42 のデータがないことを教えてくれます。

わかりました、この問題を回避するにはどうすればよいですか?

前もって感謝します。

4

1 に答える 1

0

データベーススキーマを再設計し(ルートにはconfテーブルへのリンクがあり、leaf_aとleaf_bもそうです)、3つの制約(ルート、leaf_a、およびleaf_bに)を追加するとうまくいきます。

于 2013-10-04T14:30:28.480 に答える