当前位置: 首页 > 面试题库 >

RDBMS数据库中的多对多关系

西门骁
2023-03-14
问题内容

在像mySQL这样的RDBMS数据库中处理多对多关系的最佳方法是什么?

尝试使用数据透视表来跟踪关系,但这会导致以下任一情况:

  • 规范化被抛在后面

  • 空或空的列

您采取了什么方法来支持多对多关系?


问题答案:

专门针对该关系 (有时称为 联结表 )中跟踪多对多关系。该表将该关系建模为指向相反方向的两个一对多关系。

CREATE TABLE customer (
    customer_id VARCHAR NOT NULL,
    name VARCHAR NOT NULL,
    PRIMARY KEY (customer_id));

CREATE TABLE publication (
    issn VARCHAR NOT NULL,
    name VARCHAR NOT NULL,
    PRIMARY KEY (issn));

-- Many-to-many relationship for subscriptions.
CREATE TABLE subscription (
    customer_id VARCHAR NOT NULL,
        FOREIGN KEY customer_id REFERENCES customer (customer_id),
    issn VARCHAR NOT NULL,
        FOREIGN KEY issn REFERENCES publication (issn),
    begin TIMESTAMP NOT NULL,
    PRIMARY KEY (customer_id, issn));

然后,您可以使用联结表通过外键 通过它 联接 其他表

-- Which customers subscribe to publications named 'Your Garden Gnome'?
SELECT customer.*
FROM customer
    JOIN subscription
        ON subscription.customer_id = customer.customer_id
    JOIN publication
        ON subscription.issn = publication.issn
WHERE
    publication.name = 'Your Garden Gnome';

-- Which publications do customers named 'Fred Nurk' subscribe to?
SELECT publication.*
FROM publication
    JOIN subscription
        ON subscription.issn = publication.issn
    JOIN customer
        ON subscription.customer_id = customer.customer_id
WHERE
    customer.name = 'Fred Nurk';


 类似资料:
  • 我有两个实体类订单和产品具有多对多关系(多个订单可能具有相同的产品,只要库存不是空的,并且一个订单可能包含多个产品)如下: 以下是用于插入订单和产品的Dao。产品是预定义的,我只需要更新它们的数量。订单将作为新订单插入。必须生成product\u order relationship表,并将数据作为order和product中的主键插入。 在这个场景中,数据被正确地插入到所有三个表中。但当我尝试插

  • 我在Django中创建了一个数据模型,它具有多对一关系(N个主题对1个用户),如下所示: 来自django。db从django导入模型。contrib。auth。模型导入用户 当我尝试在“管理”页面中加载数据模型时,出现以下错误: 我错过了数据模型中的什么吗? 谢谢。

  • 我希望在消费者和政策这两个实体之间建立一对多关系。一个消费者应该有几个政策。 这是我想要的一个消费JSON对象的例子: 这就是我到目前为止所做的: 政策实体 消费者实体 我想没那么难,但我已经试了几个小时了,还是做不到。我刚到Spring,所以如果有人能帮助我,我会非常感激!

  • 问题内容: 举例来说,假设我有一个包含两个维度和一个度量的事实表 FactMoney表 ProjectKey int PersonKey int 现金金额 这两个维度的定义如下: DimProject(类型0尺寸-即静态) ProjectKey int 项目名称varchar(50) DimPerson(类型2缓慢变化的尺寸) PersonKey int PersonNaturalKey int

  • 我有3个模型在我的项目: 用户型号代码: 职业标准守则 迁移: 用户职业模型代码 迁移: 当我尝试这个代码时,我通过他的名字搜索用户,并得到职业名称,然后计算该职业的用户。 代码: 我收到错误消息: 照明\数据库\查询异常:SQLSTATE[23000]:完整性约束违反:1052列'id'在其中子句是含糊不清的(SQL:选择*从存在的职业(选择*从用户内连接user_professionsuser

  • 问题内容: 我有一个Firebase数据库。我有公司和承包商。一个承包商可以为多个公司工作,而一个公司可以有多个承包商。这是直接的多对多关系。我希望能够回答有关公司和承包商的问题: 给定一家公司,他们是当前的承包商。 给承包商一个他们要工作的公司。 在Firebase中构造数据的替代方法有哪些? 问题答案: 自我回答确实是对此进行建模的一种方法。它可能是在关系数据库中建模的最直接等效方法: 承办商