设为首页 - 加入收藏 华夏网 (http://www.hxwgxz.com)- 云主机,资讯,互联网,人工智能,云计算,大数据,区块链,VR,站长网!
热搜: 2019 2020 2017 2018
当前位置: 主页 > 编程 > 正文

数据库 – 是否有一种优雅的方式来存储双重关系(即用户1和用户2

发布时间:2021-01-17 09:24 所属栏目:[编程] 来源:网络整理
导读:我本月在两个不同的工作中遇到了同样的问题: Version 1: User 1 User 2 are friendsVersion 2: Axis 1 Axis 2 when graphed should have the quadrants colored... 问题是,我没有看到使用RDBMS来存储和查询此信息的优雅方式. 有两种明显的方法: 方法1: sto

我本月在两个不同的工作中遇到了同样的问题:

Version 1: User 1 & User 2 are friends
Version 2: Axis 1 & Axis 2 when graphed should have the quadrants colored...

问题是,我没有看到使用RDBMS来存储和查询此信息的优雅方式.

有两种明显的方法:

方法1:

store the information twice (i.e. two db rows rows per relationship):
u1,u2,true 
u2,u1,true
u..n,u..i,true
u..i,u..n,true

have rules to always look for the inverse on updates: 
on read,no management needed
on create,create inverse
on delete,delete inverse
on update,update inverse

Advantage:    management logic is always the same.
Disadvantage: possibility of race conditions,extra storage (which is admittedly cheap,but feels wrong)

方法2:

store the information once (i.e. one db row per relationship)
u1,true

have rules to check for corollaries:
on read,if u1,u2 fails,check for u2,u1 
on create u1,u2: check for u2,if it doesn't exist,create u1,u2
on delete,no management needed
on update,optionally redo same check as create

Advantage: Only store once
Disadvantage: Management requires different set of cleanup depending on the operation

我想知道是否有第三种方法沿着“使用f(x,y)的关键线,其中f(x,y)对于每个x,y组合是唯一的,y)=== F(Y,X)”

我的直觉告诉我应该有一些可以满足这些要求的按位运算组合.类似于两列的东西:

key1 = x&& ?
key2 = x y

我希望那些花更多时间在数学系的人,以及更少的时间在社会学系已经看到了这种可能性或不可能性的证据,并且可以提供一个快速的“[你好白痴],它很容易被证明(即时通讯)可能,请看这个链接“(名字叫可选)

任何其他优雅的方法也将非常受欢迎.

谢谢

解决方法

还有一种方法可以通过添加额外约束来使用第二种方法.检查u1< U2:
CREATE TABLE User
( Name VARCHAR(10) NOT NULL,PRIMARY KEY (Name)
) ;

CREATE TABLE MutualFriendship
( u1 VARCHAR(10) NOT NULL,u2 VARCHAR(10) NOT NULL,PRIMARY KEY (u1,u2),FOREIGN KEY (u1) 
    REFERENCES User(Name),FOREIGN KEY (u2) 
    REFERENCES User(Name),CHECK (u1 < u2) 
) ;

读取,创建,插入或更新的规则必须使用(LEAST(u1,GREATEST(u1,u2)).

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章