因此,正如您在数据建模中所知道的,多对多关系是通过创建桥接表来处理的。这将使我们能够有外键约束。
我的问题与从具有多对多关系的表中查询数据有关。
我将举一个例子。假设我们有下面的表
表1
Column 1
Column 2
Column 3表2
Column 1
Column 4
Column 5表3(桥接表)
Column 1好的,当我试图查询表1中的数据,并离开与表2的连接时,我得到了与表左连接与表3,左连接与表2的查询数据相同的结果。这让我想知道,桥接表是否是SQL查询中必须包括的步骤!
提前感谢您:)
发布于 2020-12-11 18:42:52
您的桥接表只有一列,这表明您混淆了一对多关系(或多个一对一关系)和多对多关系。
在一对多关系中,子表直接引用父表,不需要桥接表:
create table orders (
order_id int primary key,
order_date date,
...
);
create table order_items (
order_item_id int primary key,
order_id int references orders(order_id),
...
)在多对多关系中,桥接表至少有两列,关系中起作用的每个引用表各有一列:
create table authors (
author_id int primary key,
name varchar(50),
...
);
create table books (
book_id int primary key,
title varchar(50),
...
);
create table book_authors (
author_id int references authors(author_id),
book_id int references books(book_id),
primary key (author_id, book_id)
)发布于 2020-12-11 18:50:05
让我们让你的例子不那么抽象。有不喜欢和喜欢的帖子。表1=喜欢,表2=不喜欢。
然后,桥接表
这是一个示例,其中两个子表由一个父表关联。创建桥接表并不是为了获得两个子表之间的m:n关系,而是因为子表没有父表就没有意义。子表是m:n相关的,但我们通常不把这种关系称为m:n关系,因为这些表只是紧密相关的( like属于一篇文章,而dislike属于一篇文章,但like并不真正属于dislike)。
当谈论m:n关系时,我们通常不谈论父/子关系。
例如:一个订单可以包含多个产品,一个产品可以包含多个订单。
桥接表是按顺序排列的位置:
orders和products之间没有父/子关系,但这两者是相关的,因为产品是订购的。这就是我们通常所说的m:n关系。桥接表建立了订单和产品之间的关系。
https://stackoverflow.com/questions/65249641
复制相似问题