构建这个简单数据库的最佳方法

时间:2014-03-13 09:16:30

标签: mysql sql database database-design

2 个答案:

答案 0 :(得分:1)

类别和语言之间的联系使我感到困惑。在id_category中的language字段中,您声称每种语言都有一个类别,或与一个类别相关联,或类似的内容。我怀疑。

我理解你的例子的方式,每个描述都以语言,字段和类别为特征。由于字段和类别的组合已由field_category表建模,并且具有自己的ID,因此您可以将每个描述都引用为field_category.idlanguage.id。您可以将两者结合在一起形成一个唯一的密钥。

根据您的示例,字段和类别也需要翻译。所以你需要另外两个表,一个用于保存每个表的翻译。字段的每个翻译都将引用字段和语言,两者一起形成唯一键。同样适用于类别。

某事like this

ER Diagram

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"无关?对吧?

另一个编辑: 现在它变得越来越清晰了。为了设计正确的数据模型,描述句子中的每个关系通常都是有帮助的。我认为仍然缺少一些信息,正确的模型与你在这里展示的三个不同。