【问题标题】:Design: Mandatory reference to one side of a many-to-many relationship?设计:强制引用多对多关系的一侧?
【发布时间】:2021-05-25 00:03:31
【问题描述】:

抱歉,如果标题不清楚,但我不知道如何用一句话清楚地总结这个问题(我是关系数据库的新手)。

我有以下多对多关系:每个联系人必须由 1 个人和 1 个公司组成。

我无法理解的是,我如何强制要求公司至少有一个联系人。我是否只需要使联系人表具有主键而不是复合键,然后从公司表中引用它,使其不为空?但是我不是有一个循环问题,需要一个公司来创建一个联系人,还需要一个联系人来创建一个公司?

我正在使用 Sequelize,但很高兴仅使用 SQL 就能得到答案,我会解决它,希望能得到一些指导

Person.belongsToMany(Company, { through: Contact });
Company.belongsToMany(Person, { through: Contact });

personOne.addCompany(companyOne, { through: { position: 'jobtitle' } });

谢谢

【问题讨论】:

    标签: database database-design


    【解决方案1】:

    您可以使用将插入封装到三个表中的存储过程。

    伪代码:

    procedure insert_contact (Person p, Company c, position pos)
    begin tran
        if (p not exists in People) insert into People (p);
        if (c not exists in Companies) insert into Companies (c);
        insert into contact (p, c, pos);
    commit tran
    

    然后,您必须删除直接插入到 People 和 Companies 表的权限。

    【讨论】:

    • 谢谢,我试试看
    猜你喜欢
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2017-12-30
    相关资源
    最近更新 更多