答案 0 :(得分:1)
类别和语言之间的联系使我感到困惑。在id_category
中的language
字段中,您声称每种语言都有一个类别,或与一个类别相关联,或类似的内容。我怀疑。
我理解你的例子的方式,每个描述都以语言,字段和类别为特征。由于字段和类别的组合已由field_category
表建模,并且具有自己的ID,因此您可以将每个描述都引用为field_category.id
和language.id
。您可以将两者结合在一起形成一个唯一的密钥。
根据您的示例,字段和类别也需要翻译。所以你需要另外两个表,一个用于保存每个表的翻译。字段的每个翻译都将引用字段和语言,两者一起形成唯一键。同样适用于类别。
某事like this:
create table field (
id bigint primary key,
name varchar(255) -- this is not translated
);
create table category (
id bigint primary key,
image varchar(255) -- or whatever type you need
);
create table field_category (
id_field bigint not null,
id_category bigint not null,
foreign key (id_field) references field(id),
foreign key (id_category) references category(id),
primary key (id_field, id_category)
);
create table language (
id bigint primary key,
language char(5) -- or whatever you use to name languages
);
create table description (
id_field bigint not null,
id_category bigint not null,
id_language bigint not null,
description text,
foreign key (id_field, id_category)
references field_category(id_field, id_category),
foreign key (id_language) references language(id),
primary key (id_field, id_category, id_language)
);
create table field_name (
id_field bigint not null,
id_language bigint not null,
name varchar(255),
foreign key (id_field) references field(id),
foreign key (id_language) references language(id),
primary key (id_field, id_language)
);
create table category_name (
id_category bigint not null,
id_language bigint not null,
name varchar(255),
foreign key (id_category) references category(id),
foreign key (id_language) references language(id),
primary key (id_category, id_language)
);
答案 1 :(得分:0)
目前还不清楚描述是什么。描述是否描述" Field"的条目。用不同的语言?然后你的第三个选项是正确的,其他的连接缺失。
或描述一个类别的描述?然后您的选项A是正确的。
在选项B中,您有两条"路径"从描述到类别 - 这是你想要的吗?描述可以说是A类,属于B类语言英语吗?我猜你的选择B完全错了......
编辑B后: 你的模型A是正确的。 B会使不一致成为可能,而C只是错误 - 描述与" field"无关?对吧?
另一个编辑: 现在它变得越来越清晰了。为了设计正确的数据模型,描述句子中的每个关系通常都是有帮助的。我认为仍然缺少一些信息,正确的模型与你在这里展示的三个不同。