如何在插入Likes(A,B)然后插入元组Likes(A,C)时创建一个检查是否存在Likes(B,C)的触发器?传递喜欢应该工作

时间:2016-11-07 09:05:38

标签: sqlite triggers

表格详情如下:

喜欢(ID1,ID2)

1 个答案:

答案 0 :(得分:0)

我认为你想要做的就是这个...

  • A喜欢B。
  • B喜欢C。
  • 因此A喜欢C。

硬编码" A喜欢C"进入桌子是脆弱的。考虑如果B停止喜欢C会发生什么。你删除" A喜欢C"?你怎么知道它是传递性的?如果A说他们喜欢C怎么办?你可以通过一个专栏来解决这个问题,并且#34; A喜欢C"是传递性的。

这里有directed graph。您每次添加或删除边缘时都要问的是,这是否会改变所有节点之间的连接。这是一件非常昂贵的事情。考虑一下。

A -> B -> C

X -> Y -> Z

因此,推断出A喜欢C,X喜欢Z。

如果C喜欢X怎么办?现在...

  • A喜欢X
  • A赞Y
  • A喜欢Z
  • B喜欢X
  • B喜欢Y
  • B喜欢Z
  • C赞Y
  • C赞Z

现在如果B不喜欢C?

  • A不喜欢C
  • A不喜欢X
  • A不喜欢Y
  • A不喜欢Z
  • B不喜欢X
  • B不喜欢Y
  • B不喜欢Z

这是一个只有六个节点的简单线性案例。

在图表中对每个可能的关系进行硬编码是个坏主意。并且SQL数据库在遍历图表方面并不擅长。

相反,您希望存储和遍历图表。使用SQLite的有限查询语言可能无法做到这一点。您可以使用graph databaseWITH query in PostgreSQL