设置外键的默认值?

Posted

技术标签:

【中文标题】设置外键的默认值?【英文标题】:Setting default value of foreign key? 【发布时间】:2015-01-10 11:51:55 【问题描述】:

我在数据库中有三个表:

user (user_id(pk), username, email, password, country_code(fk), city_id(fk));

country (country_code(pk), country name);

city (city_id(pk), city_name);

国家和城市表格已经填满了详细信息。用户表为空白。所有表的每条记录都有默认值“无”。

我有一个简单的界面,要求输入电子邮件和密码进行注册。

所以,当用户输入电子邮件和密码时,mysql 不允许插入。它显示以下错误:

Cannot add or update a child row: a foreign key constraint fails

这是因为user 表无法为country_codecity_id 插入不在countrycity 表中的任何值。并且用户还没有给出值,默认值是none,不在两个父表中。

那么,如何处理诚信?我应该将NULL 作为子表中两个外键的默认值(即user)吗?我尝试给默认值 NULL 并且它正在工作。我想知道它是否不会对我的数据库设计中的完整性问题造成任何麻烦?这是一个正确的方法吗?

【问题讨论】:

是的,null 应该是默认值。没有价值。但是您需要允许这些列的空值 @juergend 谢谢..我应该只在那些有外键的列中允许空值吗? 在所有可以没有值的列中。如果不需要,为什么要存储一些东西? 【参考方案1】:

通过这些设计,您可以简单地为表countrycity 添加一个“(none)”记录。

这样,您将有两个“magic values”,country_codecity_id 与此“(none)”记录相关,用作country_code(fk), city_id(fk) 在用户表的新条目中的默认值。

您还可以避免“magics”(我的意思是具有特殊含义的常量值)仅用于 country_codecity_id 硬接线'(无) ' country_namecity_name 的值,并通过 country_namecity_name 上的 where 条件选择相应的主键。

【讨论】:

以上是关于设置外键的默认值?的主要内容,如果未能解决你的问题,请参考以下文章

外键的默认值与 null

Django 模型:选择外键的默认值

主键约束,外键约束,空值约束,默认值约束,唯一约束,检查约束的各个作用是啥?

如何在 phpmyadmin 中将“关系显示列”设置为默认值

phpmyadmin - 如何设置依赖于外键的字段值?

MySQL中的外键(foreign key)