【问题标题】:Require expertise in DB Design Guidelines需要数据库设计指南方面的专业知识
【发布时间】:2018-10-03 06:01:08
【问题描述】:

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

假设我有一个名为 categories 的主表,它存储产品类别列表。

还有另一个表product_categories,它已经用product 表存储了FK。我们还应该对类别进行 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 关系吗?

【问题讨论】:

    标签: mysql database hibernate


    【解决方案1】:

    是的,您应该将product_categoriescategory varchar(255) 列替换为类别表的外键。否则,您最终会在两个不同的位置存储类别名称,从而导致不一致。

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

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

    OneToMany 用于... 一对多关联。但是你很可能在这里有一个多对多的关联:一个产品属于几个类别,一个类别包含几个产品。所以你需要...多对多。

    如果你真的有一个一对多的关联(即一个产品属于一个类别,而一个类别包含多个产品),那么你可能不想要那个连接表:产品应该知道它的类别属于,因此您应该在产品表中有一个类别 ID 外键(以及一个双向的一对多关联)。

    【讨论】:

    • 感谢@JBNizet。产品将有多个类别,并且类别将映射到多个产品。所以我假设它的两端都是@ManyToMany。我能否以某种方式从产品到类别建立单向关系,并且类别不知道它们映射到什么产品。我担心类别表将被其他表用于映射。添加 FK 是一种好习惯吗?
    • 我能以某种方式建立单向关系:是的。 添加 FK 是否是一种好习惯:是的。这就是保证您的数据不会处于会导致代码崩溃的不一致状态的原因。它还会记录您的设计。
    猜你喜欢
    • 2015-11-19
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2011-04-11
    • 2015-10-22
    • 1970-01-01
    • 2011-07-17
    相关资源
    最近更新 更多