我正在构建一个应用程序,可以将访客分配给现有用户。这些访客可以看到与他们相关联的用户的一些信息。
是的 N:M
:
用户可以关联多个访客
访客可以关联到多个用户
在引擎盖下,它们被存放在同一张table上,它们之间唯一的区别就是它们所扮演的角色。
(我的真实表有更多的字段,如密码等。。。但这些与这个问题无关)
我需要创建这样一个表:
问题是 userId
以及 guestId
引用到同一列( id
)的 Users
table。
这可行吗?
我正在构建一个应用程序,可以将访客分配给现有用户。这些访客可以看到与他们相关联的用户的一些信息。
是的 N:M
:
用户可以关联多个访客
访客可以关联到多个用户
在引擎盖下,它们被存放在同一张table上,它们之间唯一的区别就是它们所扮演的角色。
(我的真实表有更多的字段,如密码等。。。但这些与这个问题无关)
我需要创建这样一个表:
问题是 userId
以及 guestId
引用到同一列( id
)的 Users
table。
这可行吗?
3条答案
按热度按时间qnakjoqk1#
用户只能是访客或主机。这就是为什么在用户表中有一个role列。
您的guests表连续包含两个用户,正如我在请求注解中提到的,我会调用它们
host_user_id
以及guest_user_id
使他们的角色明显,并表明他们都是用户ID。table的设计还可以。唯一的缺点是,您可能会错误地将一个主机设置为guest,而将一个guest设置为host,因为guests表不知道哪个是哪个,两者都只是用户id。如果您想让数据库在这方面保证一致性,这就变得有点复杂了。下面是一个处理此问题的设计:
这看起来不像以前那么好了
host_role
不断地'host'
以及guest_role
不断地'guest'
在我们人类读者看来,这是多余的,但它保证了host_user_id
指的是主机用户和guest_user_id
对访客用户。tquggr8v2#
这就是你想要的吗?
然后,您可以将其加载为:
插入访客(全名,…)从role='guest'的旧用户中选择不同的全名;
插入用户(全名,…)从旧用户中选择不同的全名,其中role='user';
注意:这都使用了通用的sql语法,但它应该给出一个想法。
f8rj6qna3#
我不知道为什么它不起作用。不过,我会更改客人table的名称,只是为了更清楚地表明,它不容纳客人,而是容纳客人的关系。