设置外键的默认值?

4

我在数据库中有三个表:

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);

国家和城市表已经填充了详细信息,用户表为空。每个记录的所有表都有默认值“none”。

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

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

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

这是因为user表无法插入任何未在countrycity表中的country_codecity_id值。而用户还没有给出值,缺省值为none,这不在两个父表中。
那么,如何处理完整性?我应该在子表(即user)中将两个外键的默认值都设为NULL吗?我已经尝试了将默认值设为NULL,它可以正常工作。我想知道这是否会对我的数据库设计完整性问题造成破坏?这是一种适当的方式吗?

2
是的,null 应该是默认值。没有值。但是你需要允许那些列中存在 null 值。 - juergen d
@juergend 谢谢..那我应该只在那些有外键的列中允许空值吗? - Krupal Shah
在所有可能没有值的列中,为什么要存储某些东西,如果你不需要呢? - juergen d
1个回答

0

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

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

您还可以避免使用“魔法值”(我指的是具有特殊含义的常量值),只需将“(none)”值硬编码到country_namecity_name中,并通过对country_namecity_name进行where条件选择相应的主键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接