我目前正在为一个 PHP/MySQL 项目工作。在完成作业时研究数据库的高效设计时,我注意到在许多情况下,在仅处理两组数据时创建第三个表是一种很好的做法。
例如,如果我们有一张“学生”表和一张“地址”表,创建第三张表似乎是个好主意,即“Student_Addresses”,因为假设一个学生可以有多个地址(分开 parent 等),一个地址可以代表多个学生( sibling )。
我的问题是:我们如何着手填充第三个表?有没有一种方法可以使用主键和/或外键自动完成?
我试过谷歌和我的教科书来理解这一点,但我一无所获。非常感谢指向教程或文章的链接。
感谢您的帮助。我希望问题和例子很清楚。
最佳答案
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 是正确的解决方案。将数据添加到 user 表和 address 表后,您需要手动将数据添加到 user_address 表。某些对象关系映射器 (ORM) 可能会自动将数据添加到第三个表,但您需要定义关系。检查http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html .
关于php - 填充第三个表以保持效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18850595/