【发布时间】:2013-11-21 11:50:50
【问题描述】:
我有以下情况:
我有一个表格,其中包含各种语言的文本条目。定义如下:
CREATE TABLE text
(
textid character varying(70) NOT NULL,
language character varying(10) NOT NULL,
content text NOT NULL,
CONSTRAINT text_pk PRIMARY KEY (textid , language ),
CONSTRAINT languages_text_fk FOREIGN KEY (language)
REFERENCES languages (language) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
);
语言表只是语言代码列表,并没有那么相关。
现在,我需要在另一个表上引用一段文本,但我不需要,而且我不知道检索文本时使用的语言。我只知道要检索的文本的 id。实际语言将在运行时由阅读文本的用户口述。
起初我创建了这个:
CREATE TABLE content_text
(
contentid character varying(70) NOT NULL,
textid character varying(70) NOT NULL,
CONSTRAINT content_text_pk PRIMARY KEY (contentid , textid ),
CONSTRAINT content_text_text_fk FOREIGN KEY (textid)
REFERENCES text (textid) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
);
失败了
错误:没有唯一约束匹配引用表“文本”的给定键
我知道,为了避免这个错误,我必须创建一个只包含 textid 的中间表,该表将被内容和文本引用,但我真的觉得这有点矫枉过正......一个专门用于此的表,在我看来虽然 textid 不是唯一的,但是被拒绝是没有意义的……
有没有更优雅的方法来解决这个问题?
【问题讨论】:
标签: sql postgresql foreign-keys