首页 > 解决方案 > N:M 用户和客人之间的关系

问题描述

我正在构建一个可以将客人分配给现有用户的应用程序。这些客人可以看到有关与他们关联的用户的一些信息。

它是N:M

在引擎盖下,它们存储在同一张表中,它们之间的唯一区别是它们的角色。

(我的真实表有更多字段,如密码等......但这些与这个问题无关)

用户表

我需要创建一个这样的表:

客人桌

问题是userIdguestId被引用到表的同一列 ( id) Users

这可行吗?

标签: sqldatabasesequelize.js

解决方案


这是你想要的吗?

create table users (
    userId int generated always as identity primary key,
    fullname varchar(255),
    . . .
);

create table guests (
    guestId int generated always as identity primary key,
    fullname varchar(255),
    . . 
);

create table userGuests (
     userGuestId int generated always as identity primary key,
     userId int references users(userId),
     guestId int references guests(guestId
);

然后,您可以将它们加载为:

插入来宾(全名,...)从 old_users 中选择不同的全名 where role = 'guest';

insert into users (fullname, ...) select distinct fullname from old_users where role = 'user';

insert into userGuests (userId, guestId)
    select u.userId, g.userId
    from old_users ou join
         old_users og
         on ou.id = og.id join
         users u
         on ou.fullname = u.fullname join
         guests g
         on og.fullname = g.fullname
    where ou.role = 'user' and og.role = 'guest';

注意:这都使用通用 SQL 语法,但它应该给出想法。


推荐阅读