我正在运行PostgreSQL 9.4并拥有下表:
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)
);
该表允许用户拥有多辆汽车,但仅使用汽车名称一次。但其他用户可能拥有相同的汽车名称。
我想要另一个表格,其中包含对唯一约束test
的引用,并尝试了类似的内容:
CREATE TABLE mappings (
other_id CHARACTER(9) REFERENCES other (id) ON DELETE CASCADE,
user_cars REFERENCES user_cards (test) ON DELETE CASCADE
);
但是这显然失败了#34;显然"。我想确保other_id
只有一个user_car
条目的引用。
因此,要解释一下,我在表mappings
中如何从表test
中引用user_cars
。
这是目前失败的事情:
user_cars REFERENCES user_cards (test) ON DELETE CASCADE
答案 0 :(得分:0)
如果car
应该是唯一的,请仅在UNIQUE
列添加car
约束。
如果user
应该是唯一的,请仅在UNIQUE
列添加user
约束。
如果您在组合上添加UNIQUE
约束,则表格中会有重复值。
更新:
您可以在单列上添加多个约束。在Foreign key
表的UNIQUE
列上添加user_cars
约束{/ 1}}。
答案 1 :(得分:0)
如果可以避免,请不要使用复合外键引用。只需在表格中添加唯一ID:
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)
);
然后映射就是:
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,
);