多语言设计数据库。 双重独特的关键引用外键

我必须让我的数据库能够翻译一些术语。 这里是我的数据库的基本绘制:

第一张桌子(还有更多像它):

create table objects
id int PRIMARY KEY,
name varchar(50),
name_id int FOREIGN KEY,

第二张桌子:

create table language
language varchar(20)
language_id PRIMARY KEY

第三张桌子:

create table translations
language_id FOREIGN KEY,
name_id UNIQUE KEY,
translation varchar(50)

它看起来像这样:

对象:

id | name | name_id
___|______|________
1  |apple |1

语言:

language_id | laguage
____________|________
1           | ENG
____________|________
2           | DEU

译名:

language_id | name_id | translation
____________|_________|____________
1           | 1       | apple
____________|_________|____________
2           | 1       | apfel    

现在,翻译中的两列,language_id和name_id都必须是唯一的。 但只有一个,name_id必须引用表对象中的外键。

有可能吗? 如果不是,还有什么替代方案?


这是可能的,因为您可以在大多数数据库中创建UNIQUE约束:

-- Add unique constrain on two columns
ALTER TABLE TRANSLATIONS 
    ADD CONSTRAINT unq_translations UNIQUE (language_id, name_id);
-- Add foreign key constrain.
ALTER TABLE TRANSLATIONS 
    ADD CONSTRAINT fk_translations_name FOREIGN KEY (language_id, name_id) REFERENCES OBJECTS(language_id, id);

使用以下替代方案...执行依序。
1.创建表对象(object_id number(10)主键,object_name varchar(50));
2.创建表语言(language_id number(10)主键,language_name varchar(20));
3.创建表翻译(translation_id number(10)主键,translations varchar(50),object_id number(10),language_id number(10),外键(object_id)引用对象(object_id),外键(language_id)引用语言(LANGUAGE_ID));
4. alter table translation add unique(object_id,language_id);


首先,在TRANSLATIONS表中,“name_id”是UNIQUE,我很惊讶你是如何在此列中插入重复条目的。 为第三个表提供正确的数据。
在TRANSLATIONS表中,name_id不应包含重复值。 这里TRANSLATIONS表中只有一列(包含约束条件)可能包含重复条目,它是LANGUAGE_ID,并且由于它在父表LANGUAGE中已经是唯一的,所以它不具有唯一性。
但是,如果您在此处使列LANGUAGE_ID唯一,那么它将只允许那些在LANGUAGE表中的条目数,即如果LANGUAGE表包含2个条目,则您只能在TRANSLATIONS表中插入2行,因为我已经说过没有受益于这样做。

链接地址: http://www.djcxy.com/p/37467.html

上一篇: Database for multilanguage design. double unique key referece to foreign key

下一篇: How to store multilingual data?