我想要的对(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)。我不知道如何捕捉那唯一性约束。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top