首页 > 解决方案 > 关系中 null 的替代方案

问题描述

我有这些表:

+-------------+--------------+----------------------------+
|                        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                |
+-------------+--------------+----------------------------+

我在凭证表中预先生成了凭证,order_id 为NULL,直到它被购买。凭证就像product的子类型。关系(order_id)中有NULL的替代品吗?也许一般来说有更好的方法?

标签: postgresqldatabase-design

解决方案


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


推荐阅读