我在数据库中有三个表:
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并且它正在工作。我想知道如果它在我的数据库设计中没有为完整性问题制造麻烦吗?这是一种正确的方式吗?
答案 0 :(得分:0)
使用这些设计,您只需为表格country
和city
添加“(无)”记录即可。
通过这种方式,您有两个与此(无)'记录相关的“魔术值”,country_code
和city_id
,在用户表的新条目中用作 country_code(fk), city_id(fk)的默认值。
你也可以避免“{em> magics ”(我的意思是特殊含义的常数值)country_code
和city_id
只有硬连线'(无) 'country_name
和city_name
的值,并根据country_name
和city_name
上的where条件选择相应的主键。