postgresql - 关系中 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的替代品吗?也许一般来说有更好的方法?
解决方案
鉴于这voucher.order_id
是一个外键,任何替代方法都需要按顺序输入。NULL 对我来说似乎是一个合理的解决方案。
推荐阅读
- php - 为什么只有当用户第一次访问该站点时,会话值才会发生变化
- excel - 是否可以编辑(可见)但当前未激活的工作表中的单元格?
- android - 音乐播放器卡住部分唤醒锁(背景)
- command-line-interface - IBM Cloud CLI Softlayer 插件:如何通过过滤器?
- math - 如何将物体的面投影到平面上?
- servlets - request.getRequestDispatcher().forward() 无法显示请求的 HTML
- python - Python:string.find('\n') 总是产生 -1
- angular - 使用 ngFor 在表中显示嵌套对象到数组
- angular - 将 promise 与异步一起使用
- go - # 在密码 clickhouse 驱动程序中