最佳实践:外键作为主键或唯一约束

时间:2014-01-30 22:49:43

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

我正在使用Play实现一个商店!框架。 Play使用Ebean作为ORM。现在我正在创建一个评级系统,用户可以对产品进行评级。允许用户仅对产品评分一次。我只是想知道如何设计RATING表的最佳实践。

  1. 使用user_id和product_id作为主键 或
  2. 使用单独的id作为主键,在外键user_id和product_id上设置唯一约束
  3. 有哪些优点/缺点?

    User
    ---------------------
    id (PK)
    name
    ...
    ---------------------
    
    Product
    ---------------------
    id (PK)
    name
    ...
    ---------------------
    
    Rating
    ---------------------
    user_id (FK)
    product_id (FK)
    rating
    comment
    PK(user_id, product_id)
    
    OR:
    
    Rating
    ---------------------
    id (PK)
    user_id (FK)
    product_id (FK)
    rating
    comment
    UNIQUE (user_id, product_id)
    

    谢谢,

    尼克

2 个答案:

答案 0 :(得分:2)

您列出的第一个因为它更简单。 两者都解除了同样的任务,为什么会让你的生活变得复杂? 阅读:KISS

答案 1 :(得分:0)

我认为最好使用你列出的第二个,因为将来,如果你想引用“评级”,你不需要在新表中创建两个FK来引用它。在这种情况下,您只需要使用“评级”ID。如果你关心记忆经济,这是很好的,而且在我看来,这种做法使得对关系的理解变得更容易。