多对多关系模式



我有以下表格:

表信息
_id: unique id
record_id: varchar
info: varchar

表邮件
_id: unique_id
record_id: references (INFO.record_id)
email: varchar

在此场景中,电子邮件可以与不同的INFO行相关。创建具有适当关系的这样一个表的更好方法是什么?我可以在电子邮件上创建指向INFO上的非唯一id (record_id)的外键吗?

然后我如何查询,比如我有一个行为每个INFO行,包括所有的电子邮件表?

如前所述,引入JOIN表,如下所示。在被引用的表中,最好保持外键对主键的引用。

InfoEmails

info_id: references (INFO._id)
email_id: references (EMAIL._id)

InfoEmails中的主键可以连接外键,例如info_id + email_id。这将确保唯一性,并且您不需要引入可能不需要的Id列。如果您决定这样做,也可以在email_id + info_id上引入索引,以提高查询性能。

如果您在emails中创建一个record_id列,该列引用INFO表,那么您将拥有一个一对多的关系。添加UNIQUE约束使其成为一对一(或没有)关系。如果你想要一个多对多两个表之间的关系,必须用第三个表描述关系。附加的表将包含用于您希望相互关联的两个表的主键的列。

要查询关系,首先在一个表和新表之间执行JOIN,然后从新表到另一个表。如果你不熟悉SQL:是的,你可以在同一个查询中有多个JOIN。您甚至可以多次加入同一个表。

最新更新