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

问题描述:

我正在使用Play实施商店!框架。 Play使用Ebean作为ORM。现在我正在创建一个评分系统,用户可以评价产品。用户只能对产品评分一次。我只是想知道如何设计RATING表的最佳做法。最佳实践:外键作为主键或唯一约束条件

  1. 使用USER_ID和PRODUCT_ID作为主键 或
  2. 使用一个单独的id作为主键设置外键user_id的唯一约束和PRODUCT_ID

哪些优点/缺点?

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) 

谢谢

尼克

+0

什么是评级ID的目的? – Paparazzi

+0

将user_id或product_id设为NULL的评级元组的_meaning_会是什么? – wildplasser

+0

@wildplasser你从哪里得到null?你真的认为OP会允许一个空值的名字? – Paparazzi

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

+0

谢谢,听起来不错 – nick78