gpt4 book ai didi

node.js - 我如何在社交媒体演示应用程序中使用 sequelize 在数据库中实现友谊功能

转载 作者:行者123 更新时间:2023-12-03 22:43:26 25 4
gpt4 key购买 nike

我正在构建一个社交媒体演示应用程序并向该应用程序添加好友功能。
在数据库中,我正在考虑制作新表( Sequelize 中的模型),其中包含 user1 id 和 user2 id 以及一个带有一个字符的状态(接受、拒绝等)。
我尝试实现它,但遇到了一些问题:现在我需要唯一的 key ,但用户 1 和用户 2 的组合(用户 1 和用户 2 id 对)。
我如何使用 sequelize 实现这样的东西,而且我认为这不是最好的方法,所以如果你有更好的方法,请告诉我,谢谢。

最佳答案

您的描述有些欠缺,缺少一些组件。但是很清楚地看到你在描述什么
是多对多 (m:m) 关系。只是双方来自同一张 table 。虽然不是最常见的关系,
也不是太不寻常。此外,分辨率与任何其他 m:m 相同。创建另一个具有双方 key 的表
作为外键。组合 (parent1, parent2)(P1,P2) 和组合 (P2,P1) 有一个稍微不寻常的转折
应该被认为是一样的。这给规范带来了轻微的扭曲;而不是从父列生成 PK
PK 将只是生成序列(从技术上讲,除非有预期的子表,否则不需要 PK)。
然后我们在有序对 (P1,P2) 上创建一个唯一索引。所以沿着这条线的东西:

create table friends( f_id integer generated always as identity
, user_id_1 integer not null
, user_id_2 integer not null
, status varchar(1) not null default 'P'
, friends_since date not null default now()::date
, constraint friends_pk primary key(f_id)
, constraint f2user_1_fk foreign key(user_id_1)
references users(user_id)
, constraint f2user_2_fk foreign key(user_id_2)
references users(user_id)
, constraint cannot_friend_self
check (user_id_1 != user_id_2)
);
--
-- unique index to recognize (P1,P2) = (P2,P1)
create unique index already_friends on friends
( least(user_id_1,user_id_2), greatest(user_id_1,user_id_2) );
有关示例,请参阅 fiddle here。 Friends 表的双向性质导致查询中的额外复杂性。通常我会在 SQL 函数中隐藏复杂性。我还添加了一些有用的功能。您应该能够使用这些作为示例。请注意,由于它们是 SQL 函数,因此您可以提取语句并将其转换为参数化查询。

抱歉,我不知道 sequelize,所以我不会猜测翻译,但似乎互联网上有很多关于上述所有内容的例子。

关于node.js - 我如何在社交媒体演示应用程序中使用 sequelize 在数据库中实现友谊功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64081183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com