|
|
1
6
|
|
|
2
1
我不会说你在帖子中提出的实现一定是糟糕的。当然,它不是最简洁或最快的,但在我看来,它对人类来说是最容易理解的。此外,删除逻辑应该不难封装。 我可能建议的一个解决方案是使用一个存储每条消息的表,其中包含发件人ID的字段和另一个收件人ID列表的字段。当然,问题在于决定如何使用标准数据库类型之一表示ID列表,因为通常没有数组/向量/列表类型。我建议您使用VARBINARY(max)类型(如果可用),将其视为位向量(例如,每个收件人ID 4个字节)。然后,您可以创建几个函数来对数组/列表进行非常简单的逐位编码/解码。 |
|
|
3
0
否则,这是有道理的。..但我不明白为什么删除逻辑会很尴尬。您可以通过以下两种方式之一处理它:
例如。:
|
|
|
4
0
还有一个用例需要考虑(我知道我的用户想要这个)。..他们都想要一个“已发送的项目”。可以这么说,在清理房子之前,你可能想考虑一下这个用例。
创建一个触发器来为您完成此操作。你的应用程序代码需要做的就是担心将你的“已删除”列设置为true,并在所有人都将消息标记为已删除时,让UPDATE触发器取消整个交易。 当然,接下来你会知道,你的用户会想要取消删除。就我个人而言,我永远不会从数据库中删除消息,只会对用户隐藏它。 |
|
|
5
-1
(评论太长了) Tehvans方法涉及存储特定对话的参与者列表,而在您的方法中,参与者是按每条消息存储的。我预计这样做的原因是允许删除和读取标记,问题是——为什么会这样?
|
|
|
developer · 带外键的SQL表设计 1 年前 |
|
|
relatively_random · 确保两个表之间一致的共同参考 1 年前 |
|
|
b126 · 在两种不同的Oracle模式上执行相同查询的速度差异很大 2 年前 |
|
|
robertspierre · 在多对多关系中自动删除未引用的行 2 年前 |
|
|
Michael Samuel · MYSQL在以下情况下自动创建索引 8 年前 |