我订了一张桌子。每个订单可以多次拥有相同的产品。数量不够,因为每个产品可能有不同的偏好!
所以我想知道什么是更好的。。。
主键id订单id产品id?主键是PK id

订单表
(Order id,orderline)作为主键。。
然后是另一张桌子
订单行
(Order id,orderline,productid)作为主键
然后
订单行参考
(Order id,orderline,productid,preferenceid)作为主键?
我不知道这个方法是否正确。我也不知道我应该做些什么索引,以便在记录很多时不要太慢。我正在使用postgresql。。
例如,在表OrderLinesPreferences中,OrderID=1和productid=10;将是快速的还是将执行完整的表查找?

最佳答案

根据@OP对dnuttle的回答所做的评论,我认为这种情况需要条目和子条目,它们都来自基本条目的列表。
所以:

PRODUCT
  product_id PK
, description
, ...

OPTIONAL_ITEM
  option_id PK
, description
, ...

ORDER
  order_id PK
, date_taken...

ORDER_ITEM
  order_id PK, FK
, item_number PK     // Or use a surrogate as PK, if you like
, product_id FK
, quantity

ORDER_ITEM_OPTION
  order_id PK, FK
, item_number, PK, FK  // Order and item FK to ORDER_ITEM
, option_id, PK, FK    // FK to OPTIONAL_ITEM
, quantity

这为您提供了您需要的订单,同一个项目多次和0或更多的选择适用于每一个项目,如在咖啡与不同数量的奶油和糖等,根据OP的要求。

关于database-design - 数据库设计问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7300404/

10-10 18:27