Обсуждение: Inheritance and Constraints

Поиск
Список
Период
Сортировка

Inheritance and Constraints

От
Andrew Vit
Дата:
Greetings to the local gurus,

I'm building a set of child tables that take their pkey (id) from a serial
column in the parent table. Now I want to create a separate table for a
many:1 relation with one of the child table rows:

--Simplifying greatly here:

CREATE TABLE products (
  id   serial      NOT NULL PRIMARY KEY,
  name varchar(64) NOT NULL,
);

CREATE TABLE thing_1 (
  foo  smallint,
  bar  text,
) inherits (products);

CREATE TABLE grading (
  thingid  int NOT NULL REFERENCES thing_1 (id),   --this is the problem.
  userid   int NOT NULL REFERENCES users (id),
  vote     smallint NOT NULL,
  PRIMARY KEY (thingid, userid)
)

I'm having trouble trying to create the foreign key that references the
inherited id in my child table. Is this possible to do? Or can the id only
be referenced to the parent table? Is there another (better) way to check
this constraint?

Thanks,
Andrew Vit



Re: Inheritance and Constraints

От
Stephan Szabo
Дата:
On Wed, 16 Jul 2003, Andrew Vit wrote:

> CREATE TABLE products (
>   id   serial      NOT NULL PRIMARY KEY,
>   name varchar(64) NOT NULL,
> );
>
> CREATE TABLE thing_1 (
>   foo  smallint,
>   bar  text,
> ) inherits (products);
>
> CREATE TABLE grading (
>   thingid  int NOT NULL REFERENCES thing_1 (id),   --this is the problem.
>   userid   int NOT NULL REFERENCES users (id),
>   vote     smallint NOT NULL,
>   PRIMARY KEY (thingid, userid)
> )

Is it complaining that there isn't a unique index on thing_1(id)?  Primary
keys don't inherit currently, so there's no constraint guaranteeing
uniqueness on thing_1.id.