定义零值含义全局



我创建了一个website_settings表。将website_id作为null是不好的做法,这意味着此key在其他全局中应用于任何网站?

例如:

+----+-----------+------------+------------------------------+---------------+---------+
| id | client_id | website_id | key                          | value         | is_json |
+----+-----------+------------+------------------------------+---------------+---------+
|  7 |         1 | NULL       | display_featured_products    | 1             |       0 |
|  9 |         1 | NULL       | display_popular_products     | 1             |       0 |
| 10 |         1 | 1          | categories_display_mode      | across        |       0 |
| 11 |         1 | 2          | categories_display_mode      | across        |       0 |
| 12 |         1 | 3          | categories_display_mode      | single        |       0 |
| 13 |         1 | NULL       | categories_id                | ["3","5","6"] |       1 |
+----+-----------+------------+------------------------------+---------------+---------+

您也可以看到我已经重复了categories_display_mode的密钥,并且网站_id不是null。

编辑:固定的ID列为唯一

制作 website_id允许nulls表示该列不能成为此表的键的一部分(键列不可用)。

如果我们查看表中的其他列:

id, client_id, key, value, is_json

我们可以看到这些列中的某些值是重复的:

| 10 |         1 | categories_display_mode      | across        |       0 |
| 10 |         1 | categories_display_mode      | across        |       0 |

根本没有候选密钥。因此,您提议的设计似乎有问题。

根据您所说的话,我希望website_idkey之间存在一些非钥匙依赖性。如果您应用第五正常形式的原理,我认为其中一个或两个应该在另一个表中,而 notable nullable。结论:根据这里的信息,我认为使website_id无效是错误的。

null在SQL中以不同的方式使用。

null的其中一种含义之一是不适用的值,类似于仍在雇用的员工的"终止日期"。

在您的情况下,使用null表示密钥适用于任何/所有网站是合理使用null。这比为此目的试图分配一些"特殊值"(例如0或-999)更好。

相关内容

  • 没有找到相关文章

最新更新