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


Interesting SQL structure: part of primary key could be NULL

这是我的表格:

PRODUCT_ID (pk) | GROUP_ID (pk) | PRICE

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

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

我建议创建一个具有自己的ID的"全局"组。即使您能够将group_id设置为 null,这感觉也好多了。因此,每个小组都有自己的奖品和"全球"小组的价格作为附加。

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

如果组 ID 1是"全局"组,则组 12 将具有 ID 1的产品的价格10,50