简体   繁体   中英

Postgresql, references to unique constraint

I'm running PostgreSQL 9.4 and have the following table:

CREATE TABLE user_cars (
    user_id SERIAL REFERENCES users (id) ON DELETE CASCADE,
    car CHARACTER VARYING(255) NOT NULL,
    CONSTRAINT test UNIQUE (user_id, car)
);

The table allows a user to have multiple cars, but only use the car name once. But other users may have the same car name.

I would like to have another table with references to the unique constraint test , and have tried stuff like:

CREATE TABLE mappings (
    other_id CHARACTER(9) REFERENCES other (id) ON DELETE CASCADE,
    user_cars  REFERENCES user_cards (test) ON DELETE CASCADE
);

But that fails "obviously". I would like to make sure that other_id only have a single references to a user_car entry.

So to explain, how can I in table mappings have a references to test from table user_cars . This is the thing that fails currently:

    user_cars  REFERENCES user_cards (test) ON DELETE CASCADE

If car should be unique, add UNIQUE constrain only on car column. If user should be unique, add UNIQUE constrain only on user column.

If you add UNIQUE constrain on combination, then there will be duplicate values in the table.

UPDATE: You can add multiple constraints on single column. With Foreign key add UNIQUE constraint as well on user_cars column in mapping table.

Don't use composite foreign key references, if you can avoid it. Just add a unique id to the table:

CREATE TABLE user_cars (
    user_car_id serial primary key,
    user_id int REFERENCES users (id) ON DELETE CASCADE,
    car CHARACTER VARYING(255) NOT NULL,
    CONSTRAINT test UNIQUE (user_id, car)
);

Then mappings is simply:

CREATE TABLE mappings (
    mapping_id serial primary key,
    user_car_id int references user_cars(user_car_id) on delete cascade,
    other_id CHARACTER(9) REFERENCES other (id) ON DELETE CASCADE,
);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM