Альтернативы null в отношениях - PullRequest
0 голосов
/ 16 июня 2020

У меня есть эти таблицы:

+-------------+--------------+----------------------------+
|                        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 и NULL для order_id, пока он не был куплен. ваучер похож на подтип для продукта . Есть ли альтернативы для NULL в отношении (order_id)? А может есть вообще подход получше?

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Учитывая, что voucher.order_id является внешним ключом, любая альтернатива должна иметь запись по порядку. NULL кажется мне разумным решением.

1 голос
/ 16 июня 2020

Если вам не нужно значение NULL в столбце внешнего ключа, вам придется добавить специальную запись «без порядка» в таблицу order.

Это решение будет работать так же хорошо как использование значений NULL, и, возможно, это упростит ваши запросы.

Одним из возможных недостатков может быть то, что вы больше не можете определять внешний ключ как ON DELETE SET NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...