同时将值插入两个表 - 一对一关系

时间:2014-07-14 14:25:07

标签: mysql sql insert one-to-one

我有两个mysql数据库表。他们彼此之间有一对一的关系。他们是空的。我无法向任何人插入价值。每个人都有另一个外键。我打算在同一时间向他们插入价值。但是,我没有找到哪个sql查询是必要的。你有什么报价? 感谢

一对一的关系示例:

student: student_id, first_name, last_name, address_id
address: address_id, address, city, zipcode, student_id

3 个答案:

答案 0 :(得分:1)

您在学生表中不需要address_Id。如果学生无家可归怎么办?如果学生有多个地址怎么办?他/她可能有一个邮寄地址,大学城的当地地址和家庭住址。 即使对于只有一个地址的学生,您也可以通过使用student_Id查询地址表来获取该地址。

 Select * From addresses where student_id = [Whatever his/her id is]

更一般地说,多个学生可能住在同一个地址。两个表都不应该有另一个FK。应该有一个地址表,addressID,一个学生表studentId,第三个表只包含studentIdaddressId,表示一个学生和{一个地址。此表的PK应该是复合的(使用StudentIdAddressId

答案 1 :(得分:0)

这不是MYSQL的工作原理。听起来您的数据库设计需要重新设计。你不能拥有像这样的圆形外键。 您一次只能插入一个表格。

查看您的表格,学生应将Student Id作为主键,并将外键与地址表关联起来。地址中的学生ID不应该在该表中。

答案 2 :(得分:0)

对于1对1的表关系,这并不意味着你必须将他们的PK放在一起,而是人们通常会决定哪个FK转到另一个表,而这就是全部。根据您的操作,它显示了多对多的表关系,而正确的模式将创建一个新表,其中包含FK到这两个表。

详细说明:

如果一名学生可以拥有多个地址,而且许多学生可以住一个地址,那么该模式是:

student: student_id, first_name, last_name, address_id
address: address_id, address, city, zipcode, student_id
student_address: student_id (FK), address_id (FK)

如果1名学生只能拥有1个地址,1个地址只能由1名学生居住,则架构为:

student: student_id, first_name, last_name, address_id, address, city, zipcode