设置外键的默认值?
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_code
和city_id
插入不在country
和city
表中的任何值。并且用户还没有给出值,默认值是none,不在两个父表中。
那么,如何处理诚信?我应该将NULL
作为子表中两个外键的默认值(即user
)吗?我尝试给默认值 NULL 并且它正在工作。我想知道它是否不会对我的数据库设计中的完整性问题造成任何麻烦?这是一个正确的方法吗?
【问题讨论】:
是的,null
应该是默认值。没有价值。但是您需要允许这些列的空值
@juergend 谢谢..我应该只在那些有外键的列中允许空值吗?
在所有可以没有值的列中。如果不需要,为什么要存储一些东西?
【参考方案1】:
通过这些设计,您可以简单地为表country
和city
添加一个“(none)”记录。
这样,您将有两个“magic values”,country_code
和 city_id
与此“(none)”记录相关,用作country_code(fk), city_id(fk) 在用户表的新条目中的默认值。
您还可以避免“magics”(我的意思是具有特殊含义的常量值)仅用于 country_code
和 city_id
硬接线'(无) ' country_name
和 city_name
的值,并通过 country_name
和 city_name
上的 where 条件选择相应的主键。
【讨论】:
以上是关于设置外键的默认值?的主要内容,如果未能解决你的问题,请参考以下文章
主键约束,外键约束,空值约束,默认值约束,唯一约束,检查约束的各个作用是啥?