Postgres的:从一个唯一的参考到B
-
18-09-2019 - |
题
我想要的对(TAG1,TAG2)和TAG_ID之间的双射。
CREATE TABLE tags (
question_id INTEGER NOT NULL,
tag_id SERIAL NOT NULL,
tag1 VARCHAR(20),
tag2 VARCHAR(20),
PRIMARY KEY(question_id, tag_id),
(tag1, tag2) UNIQUE references tags(tag_id) #How?
);
我想没有参考如:
(PHP, Perl) points to 1 and 2,
3 points to (C#, null) and (Python, Elinks)
在换句话说,我想对参考电压进行FROM(TAG1,TAG2)特有的标签(TAG_ID),不UNIQUE(TAG1,TAG2)。
解决方案
这可能是更喜欢你正在寻找什么:
CREATE TABLE tags (
question_id INTEGER NOT NULL,
tag_id SERIAL NOT NULL,
tag1 VARCHAR(20),
tag2 VARCHAR(20),
PRIMARY KEY (tag_id),
INDEX (question_id),
UNIQUE (tag1, tag2)
);
制作“TAG_ID”的主键意味着你只能有一个条目给定“TAG_ID”,并且基于“TAG_ID”搜索将要快。
在“question_id”该指数将基于“question_id”,这是我认为你是想用你原来的主键定义做提高搜索速度。如果你真的想(TAG_ID,question_id)对是唯一的,因为你有它,然后在里面添加一个UNIQUE(TAG_ID,question_id),但我要说的是,你应该离开TAG_ID作为主键。
在(TAG1,TAG2)的唯一性约束防止了反向映射从具有重复。
下面是什么可以工作的几个例子:
使用:
1 - >(X,Y)
2 - >(X,Z)
失败(TAG_ID是主键,因此是唯一的):
1 - >(X,Y)
1 - >(Y,X)
失败(对(TAG1,TAG2)不是唯一的):
1 - >(X,Y)
2 - >(X,Y)
然而,对(x,y)是不等于对(Y,X)。我不知道如何捕捉那唯一性约束。
不隶属于 StackOverflow