一对一的关系示例:
student: student_id, first_name, last_name, address_id
address: address_id, address, city, zipcode, student_id
答案 0 :(得分:1)
您在学生表中不需要address_Id。如果学生无家可归怎么办?如果学生有多个地址怎么办?他/她可能有一个邮寄地址,大学城的当地地址和家庭住址。 即使对于只有一个地址的学生,您也可以通过使用student_Id查询地址表来获取该地址。
Select * From addresses where student_id = [Whatever his/her id is]
更一般地说,多个学生可能住在同一个地址。两个表都不应该有另一个FK。应该有一个地址表,addressID
,一个学生表studentId
,第三个表只包含studentId
和addressId
,表示一个学生和{一个地址。此表的PK应该是复合的(使用StudentId
和AddressId
)
答案 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