0

テーブルを次のように定義しました。

create table device (
id serial primary key,
manufacturerid integer references manufacturer(id) on delete restrict,
model text,
price real,
usagepros text,
usagecons text
);

create table robot (
numaxes integer,
capacity real,
reach real,
accuracy real,
installmethodid integer references installmethod(id) on delete restrict,
mass real
) inherits (device);

create table robotComplex(
id serial primary key,
name text
);

create table robotComplexDevice(
id serial primary key,
deviceId integer references device(id) on delete restrict,
robotcomplexid integer references robotcomplex(id) on delete cascade
);

etc...

SQLコマンドを実行すると、次のようになります。

 id  | manufacturerid | model | price | usagepros | usagecons | numaxes | capacity | reach | accuracy | installmethodid | mass  
-----+----------------+-------+-------+-----------+-----------+---------+----------+-------+----------+-----------------+-------
 159 |            117 | Robot | 100.3 | OK        | NoOK      |       6 |     15.3 |  15.4 |  76.1234 |              45 | 100.1

> select * from device; 
 id  | manufacturerid | model | price | usagepros | usagecons 
-----+----------------+-------+-------+-----------+-----------
 159 |            117 | Robot | 100.3 | OK        | NoOK

> select * from robotcomplex;
 id |     name     
----+--------------
 27 | Complex


> insert into robotcomplexdevice (deviceid, robotcomplexid) values (159, 27);
ERROR:  insert or update on table "robotcomplexdevice" violates foreign key constraint        "robotcomplexdevice_deviceid_fkey"
DETAIL:  Key (deviceid)=(159) is not present in table "device".

「デバイス」テーブルを継承するように「ロボット」テーブルを定義したのに、なぜか参照できません。オブジェクト リレーショナル データベース モデルを正しく取得していない可能性があります。しかし、テーブルを参照できない場合、オブジェクト リレーショナル モデルのポイントは何ですか?

4

1 に答える 1

2

これは文書化された動作です:

http://www.postgresql.org/docs/current/static/ddl-inherit.html#DDL-INHERIT-CAVEATS

于 2012-04-06T16:52:15.587 に答える