我有以下表格:
表信息_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
。您甚至可以多次加入同一个表。