设置外键的默认值?

时间:2014-11-13 10:50:34

标签: mysql database database-design foreign-keys relational-database

我在数据库中有三个表:

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并且它正在工作。我想知道如果它在我的数据库设计中没有为完整性问题制造麻烦吗?这是一种正确的方式吗?

1 个答案:

答案 0 :(得分:0)

使用这些设计,您只需为表格countrycity添加“(无)”记录即可。

通过这种方式,您有两个与此(无)'记录相关的“魔术值”,country_codecity_id,在用户表的新条目中用作 country_code(fk) city_id(fk)的默认值。

你也可以避免“{em> magics ”(我的意思是特殊含义的常数值)country_codecity_id只有硬连线'(无) 'country_namecity_name的值,并根据country_namecity_name上的where条件选择相应的主键。