有趣的SQL结构:主键的一部分可能是NULL

时间:2012-08-09 11:49:33

标签: php mysql

这是我的表:

PRODUCT_ID (pk) | GROUP_ID (pk) | PRICE

有了这个,我会为不同用户的产品设定不同的价格。如果价格适用于每个组,则GROUP_ID将为NULL。但这是一个PK - 它不能为NULL。 PRODUCT_ID不能是PK standallone,因为可以有更多不同价格的产品。那怎么躲闪呢?

2 个答案:

答案 0 :(得分:2)

正如您所说,不可能将表的主键设为NULL。我建议您有一些“特殊”值(非常像NULL,只是其他有效的东西),表示所述价格适用于所有组(例如~0如果您使用的是INT UNSIGNED作为GROUP_ID)的类型。

答案 1 :(得分:1)

我建议创建一个具有自己ID的“全局”组。即使您能够将group_id设置为null,这种感觉也会更好。因此,每个小组都将自己的奖品和“全球”小组的价格作为补充。

1 | 1 | 10,50
2 | 2 | 15,50
2 | 3 | 15,70

如果组ID 1是“全局”组,则对于ID为1的产品,组210,50的价格为1