关系中 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
。
我有这些 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
。