ebean将外键定义为主键还是更好的唯一约束?

时间:2014-02-02 22:51:40

标签: sql foreign-keys jpa-2.0 primary-key ebean

我目前正在使用Play 2.2.1为网上商店实施评级系统。 Play使用Ebean作为ORM。在商店中,每个评级产品都有平均评级。 所以我创建了两个模型:

产品:

@Entity
public class Product extends Model {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "product_seq")
  public Long id;

  @OneToOne(mappedBy = "product")
  public AverageRating averageRating;
  ...
}

AverageRating:

@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "product_id"))
public class AverageRating extends Model {

  @OneToOne
  @JoinColumn(name="product_id")
  public Product product; 
  ...
}

一对一关系应该是双向的,而自己的模型是AverageRating。 我为AverageRating生成的表格如下所示:

create table average_rating (
product_id                bigint,
average_grade             float,
...    
constraint uq_average_rating_1 unique (product_id));

alter table average_rating add constraint fk_average_rating_product_1 foreign key
(product_id) references product (id) on delete restrict on update restrict;

我的问题:我宁愿将foreign_id定义为average_rating中的主键,而不是使用唯一约束。或者我完全错了,应该更好地使用单独的id作为主键并在product_id上保留唯一约束?如果将删除产品,我可以定义级联,因此average_rating中的相应行也将被删除。所以我没有看到任何单独身份证明的理由。 如果使用外键作为主键的想法听起来不错,那么映射将如何?如果我使用

@OneToOne
@PrimaryKeyJoinColumn(name="product_id")    
public Product product;

在AverageRating中,产品的所有属性都将加入我的average_rating表...

谢谢,

尼克

0 个答案:

没有答案