需要数据库设计准则方面的专业知识

时间:2018-10-03 06:01:08

标签: mysql database hibernate

我在设计某些表时需要帮助,并且想知道这是否是正确的方法。

考虑一下,我有一个名为categories的主表,用于存储产品类别列表。

另一个表product_categories已将FK与product表一起存储。我们还应该有类别的FK吗?这有什么好处和坏处。这里需要数据库专业知识。

create table product (
  id int,
  name varchar(255)
);

create table categories (
  id int,
  category varchar(255)
);

create table product_categories(
  id int,
  product_id int,
  category varchar(255)
  FOREIGN KEY (product_id) REFERENCES product (id)
);

我们是否需要使用@ElementCollection@OneToMany关系?

1 个答案:

答案 0 :(得分:1)

是的,您应该用类别表的外键替换category varchar(255)的{​​{1}}列。否则,您将在两个不同的位置结束存储类别名称,从而导致不一致。

  

我们需要使用@ElementCollection或@OneToMany关系吗?

ElementCollection用于简单或嵌入式类型的集合。不适用于实体之间的关联。

OneToMany用于...一对多关联。但是您很可能在这里有一个多对多关联:一个产品属于多个类别,一个类别包含多个产品。因此,您需要... ManyToMany。

如果您确实有一对多关联(即一个产品属于一个类别,并且一个类别包含多个产品),那么您可能不希望该联接表:该产品应该知道该类别属于,因此您应该在产品表中具有类别ID外键(以及双向一对多关联)。