【问题标题】:Can a foreign key be null or left empty? [duplicate]外键可以为空或留空吗? [复制]
【发布时间】:2014-07-17 01:51:24
【问题描述】:

我的问题:

虽然我的数据库相当复杂,但我只包括carcustomer 表。

所以我有一个带有相关详细信息的customer 表和customer_id 作为primary key

现在,在car 表中,我希望将foreign key 链接到customer_id,因此在car 表中我可以看到谁拥有什么。问题是如果car还没带怎么办?

据我所知,外键必须有一个 customer_id 才能添加到表中。

我在这里遗漏了什么还是我偏离了轨道,我读到了一些关于链接表的东西? foreign key 可以是 null 吗?


另外一件事,我如何设置规则,例如:

'A car 只能有 1 个manufacturer(这是一个与fk 链接的单独表)'?我猜这是用php正确完成的?

如果有人想要数据库当前 ERD 的图片,我有。

【问题讨论】:

  • 是的,FK 可以为 NULL。对于您的第二个问题A car can only have 1 manufacturer ...您可以使用CHECK CONSTRAINT

标签: php mysql sql database null


【解决方案1】:

对于第一个问题,请查看此参考:Can a foreign key be NULL and/or duplicate?

因此,您的问题将被标记为重复。


关于第二个:

出于安全目的(尤其是最后一个),phpdatabase 都可以处理关系可以应该。这保证您的数据不会被破坏,以防有人“忘记”这种关系。

它们只是包含另一个表的 ID 的表的列。您可以使用“字符串”、“日期”或任何您想到的将 1 个实体与另一个实体相关联,但最安全和更快的选择是使用另一个实体的 ID。

为什么?

Primary_keys 必须唯一的,这保证您没有重复(将它们视为您的上下文中的通用标识),并且foreign_keys 必须属于另一个表中的另一个实体。您不能使用不属于其他表中任何实体的值,也不能删除在其他表中具有该 ID 的实体 foreign_key 在其他一些实体中(您必须在删除“父”之前删除所有“子”,否则它们将是“孤儿”)

关于这些键的更多信息是我在上面发布的link 以及您可以找到的任何其他丰富的参考资料heregoogling


当然,你可以忽略它,根本不处理它,但这是一种糟糕的做法,不建议这样做。 and I will hunt you down if I find out you did this... hahah

【讨论】:

    猜你喜欢
    • 2012-12-10
    • 1970-01-01
    • 2017-03-07
    • 2015-04-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多