【发布时间】:2017-12-07 13:49:46
【问题描述】:
这个问题的一个例子:
假设您有一个表项目。表项目已经 包含数据。现在您想将 project_type_id 列添加到 表,不能为 NULL 并且具有 project_types 的外键 桌子。
数据库看到project_type_id不能为NULL,所以插入了一个 0 在所有现有行的列中。 0 不存在于 project_types 表,因此外键约束失败。这 表示您不能添加外键。
我考虑在 project_types 表中添加第一个“默认”行并将所有项目链接到该类型。这不是一个好的解决方案,因为用户必须将所有类型从“默认”更改为正确的类型。
你对这个问题有什么解决方案?
【问题讨论】:
-
FK 的全部意义在于强制完整性。不要搜索解决方法,而是确保数据正确。因此,在添加 FK 之前,请确保该列包含有效数据。
-
在未添加所有数据时将其设置为可为空。在您的情况下,未知 / null 似乎是一个有效的选项。
-
我想我会使用@jeroen 建议的方法。在后端,我们将字段设为必填,每次有人对项目进行更改时,他需要选择项目类型,直到所有数据都正确填写。然后我们可以添加 NOT NULL 约束。
标签: php mysql database laravel foreign-keys