sql - N:M 用户和客人之间的关系
问题描述
我正在构建一个可以将客人分配给现有用户的应用程序。这些客人可以看到有关与他们关联的用户的一些信息。
它是N:M
:
- 用户可以关联多个客人
- 客人可以关联到多个用户
在引擎盖下,它们存储在同一张表中,它们之间的唯一区别是它们的角色。
(我的真实表有更多字段,如密码等......但这些与这个问题无关)
我需要创建一个这样的表:
问题是userId
和guestId
被引用到表的同一列 ( id
) Users
。
这可行吗?
解决方案
这是你想要的吗?
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 语法,但它应该给出想法。
推荐阅读
- python - 从烧瓶中的表单获取数据的问题
- python - 如何在 python 中生成 JWT 断言
- spring-batch - SQL [SELECT * FROM AH_PATIENT] 的未分类 SQLException;SQL状态[60000];错误代码[604];ORA-00604: 递归 SQL 级别 1 发生错误
- c# - Xamarin 表单中的可单击图像区域
- python - 如果网站没有让我保持登录状态,如何 requests.Session().get?
- c# - Autofac : 关于 OnActivating 和 OnActivated 的问题
- swift - 如何访问我的应用程序的自定义对象?
- c++ - 涉及 SFINAE 的重载 C++ 模板函数的地址
- java - sqoop:java.lang.NoClassDefFoundError:org/apache/hadoop/mapreduce/InputFormat
- python - 我在除以 2 代码时遇到问题