我创建了一个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_id
和key
之间存在一些非钥匙依赖性。如果您应用第五正常形式的原理,我认为其中一个或两个应该在另一个表中,而 notable nullable。结论:根据这里的信息,我认为使website_id
无效是错误的。
null在SQL中以不同的方式使用。
null的其中一种含义之一是不适用的值,类似于仍在雇用的员工的"终止日期"。
在您的情况下,使用null表示密钥适用于任何/所有网站是合理使用null。这比为此目的试图分配一些"特殊值"(例如0或-999)更好。