数据库 – 是否有一种优雅的方式来存储双重关系(即用户1和用户2
我本月在两个不同的工作中遇到了同样的问题: 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&& ? 我希望那些花更多时间在数学系的人,以及更少的时间在社会学系已经看到了这种可能性或不可能性的证据,并且可以提供一个快速的“[你好白痴],它很容易被证明(即时通讯)可能,请看这个链接“(名字叫可选) 任何其他优雅的方法也将非常受欢迎. 谢谢 解决方法还有一种方法可以通过添加额外约束来使用第二种方法.检查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,我们将及时予以处理。 |
-
我从这里生成一个视图: create or replace view date...[详细]
-
sql – LEFT JOIN(OUTER JOIN)与INNER JOIN的条件
SELECT A.COL1,B.COL1,C.COL1FROM TABLEA ALEFT JOIN ...[详细]
-
本篇章节讲解CI框架(CodeIgniter)公共模型类定义与用...[详细]
-
解决form中action属性后面?传递参数 获取不到的问题
如下所示: echo " 您将更新商品编号为 $p_id 的商品...[详细]
-
sql – Oracle是否为Number数据类型存储尾随零?
当我在表中存储数值并在SQL Developer中查询该表时,它...[详细]
-
本篇章节讲解php基于SQLite实现的分页功能。供大家参...[详细]
-
本篇章节讲解PHP封装的PDO数据库操作类。分享给大家供...[详细]
-
这里要说明一下 因为本人比较懒 博客中相关文章的内容...[详细]
-
今天PHP站长网 52php.cn把收集自互联网的代码分享给大...[详细]
-
本篇章节讲解PHP实现删除多重数组对象属性并重新赋值...[详细]