Re: DB design and foreign keys

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: DB design and foreign keys
Дата
Msg-id 8787.1134498689@sss.pgh.pa.us
обсуждение исходный текст
Ответ на DB design and foreign keys  (Gianluca Riccardi <ml-reader@moonwatcher.it>)
Ответы Re: DB design and foreign keys  (Gianluca Riccardi <ml-reader@moonwatcher.it>)
Список pgsql-sql
Gianluca Riccardi <ml-reader@moonwatcher.it> writes:
> CREATE TABLE orders  (
>    id serial,
>    order_code serial,
>    customer_code integer REFERENCES customers (customer_code) NOT NULL,
>    order_date time without time zone NOT NULL,
>    remote_ip inet NOT NULL,
>    order_time timestamp with time zone NOT NULL,
>    order_type varchar(10) NOT NULL,
>    state varchar(10) NOT NULL,
>    PRIMARY KEY (id, order_code)
> );

> when i try to create the table order_items postgresql gives the 
> following error:

> business-test-db=# CREATE TABLE order_items (
> business-test-db(#    id serial,
> business-test-db(#    order_code integer REFERENCES orders (order_code) 
> NOT NULL,
> business-test-db(#    customer_code integer REFERENCES customers 
> (customer_code) NOT NULL,
> business-test-db(#    product_code varchar(60) REFERENCES products 
> (code) NOT NULL,
> business-test-db(#    qty int NOT NULL,
> business-test-db(#    price numeric REFERENCES products (price) NOT NULL,
> business-test-db(#    row_price numeric,
> business-test-db(#    PRIMARY KEY (id, order_code)
> business-test-db(# );
> NOTICE:  CREATE TABLE will create implicit sequence "order_items_id_seq" 
> for "serial" column "order_items.id"
> NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index 
> "order_items_pkey" for table "order_items"
> ERROR:  there is no unique constraint matching given keys for referenced 
> table "orders"

> i'm a RTFM man, but i miss the point from the documentation obviously, 
> because what i don't understand is why the referenced column isn't 
> considered to be unique.

order_code is not by itself unique --- SERIAL doesn't guarantee that.
I'm not sure why you are declaring the primary key of orders as being
the combination of *two* serial columns, but if that's what you really
need and you also want to be able to reference a row by just one of
them, you'll need to apply a separate unique constraint to just the
order_code column.
        regards, tom lane


В списке pgsql-sql по дате отправления:

Предыдущее
От: John McCawley
Дата:
Сообщение: Re: DB design and foreign keys
Следующее
От: Jaime Casanova
Дата:
Сообщение: Re: DB design and foreign keys