关系中 null 的替代方案

Alternatives for null in relations

我有这些 table:

+-------------+--------------+----------------------------+
|                        product                          |
+-------------+--------------+----------------------------+
| product_id  | int(11)      | PRIMARY KEY AUTO_INCREMENT |
| name        | varchar(255) |                            |
| type        | enum         |                            |
| vendor_id   | int(11)      | FOREIGN KEY                |
+-------------+--------------+----------------------------+

+-------------+--------------+----------------------------+
|                        voucher                          |
+-------------+--------------+----------------------------+
| code        | varchar(255) | PRIMARY KEY FOREIGN KEY    |
| product_id  | int(11)      | PRIMARY KEY FOREIGN KEY    |
| order_id    | int(11)      | FOREIGN KEY NULLABLE       |
+-------------+--------------+----------------------------+

+-------------+--------------+----------------------------+
|                        order                            |
+-------------+--------------+----------------------------+
| order_id    | int(11)      | PRIMARY KEY AUTO_INCREMENT |
| user_id     | int(11)      | FOREIGN KEY                |
| product_id  | int(11)      | FOREIGN KEY                |
+-------------+--------------+----------------------------+

我在 voucher table 和 NULL 中为 order_id 预生成了凭证,直到它被购买了。 voucher 就像 product 的子类型。 NULL 在关系 (order_id) 中是否有任何替代方案?也许总体上有更好的方法?

鉴于 voucher.order_id 是外键,任何替代方案都需要按顺序输入。 NULL 对我来说似乎是一个合理的解决方案。

如果您不想在外键列中使用 NULL 值,则必须在 order table.

中添加一个特殊的“无顺序”条目

该解决方案与使用 NULL 值一样有效,也许它会使您的查询更简单。

一个可能的缺点是您不能再将外键定义为 ON DELETE SET NULL