我目前正在为一个php/mysql项目工作。在研究分配任务时数据库的有效设计时,我注意到,在许多情况下,当只处理两组数据时,创建第三个表是一种很好的做法。
例如,如果我们有一个“学生”表和一个“地址”表,那么最好创建第三个表,即“学生地址”,因为一个学生可以假设有多个地址(分离的父母等),而一个地址可以代表多个学生伊布林)。
我的问题是:我们如何填充第三个表?有没有办法使用主键和/或外键自动完成?
我试过google和我的课本来理解这一点,但我一无所获。我们非常感谢您提供教程或文章的链接。
谢谢你的帮助。我希望问题和例子是清楚的。

最佳答案

n:m或1:m规范化规则
选项1:

user table
id
f_name
s_name
......

user address table
id
user_id    // this should be index only as foreign keys will allow 1:1 only
address line 1
address line 2
address line 3
address_type (home, office ....)

选择2:
user table
id
f_name
s_name
......

address table
id
address line 1
address line 2
address line 3
address_type (home, office ....)

user_address table
userId
addressId

根据您的描述,选项2将是正确的解决方案。将数据添加到用户表和地址表后,需要手动将数据添加到用户地址表。某些对象关系映射器(orm)可能会自动将数据添加到第三个表中,但您需要定义关系。检查http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html
http://docstore.mik.ua/orelly/linux/sql/ch02_02.htm
http://www.keithjbrown.co.uk/vworks/mysql/mysql_p7.php

10-06 02:27