Php 插入唯一值而不自动递增
为了简单地解释这一点,想象一个房间里挤满了人在互相交谈。一个人对另一个人所做的每一条语句都是该表中的一条记录,所有这些记录都有一个通过自动递增分配的唯一ID 然而,并不是这个房间里的每个人都在和其他人交谈。正在进行多个对话 这些对话之间必须是独一无二的。这将防止启动重复的会话ID,并防止站点收集不属于该用户的所有语句 或者,在图形表示中:Php 插入唯一值而不自动递增,php,mysql,sql,Php,Mysql,Sql,为了简单地解释这一点,想象一个房间里挤满了人在互相交谈。一个人对另一个人所做的每一条语句都是该表中的一条记录,所有这些记录都有一个通过自动递增分配的唯一ID 然而,并不是这个房间里的每个人都在和其他人交谈。正在进行多个对话 这些对话之间必须是独一无二的。这将防止启动重复的会话ID,并防止站点收集不属于该用户的所有语句 或者,在图形表示中: ---------------------------------------------- | MessageID | ConvoID | Sender |
----------------------------------------------
| MessageID | ConvoID | Sender | Recipients | etc...
----------------------------------------------
| 1 | 1 | A | B |
----------------------------------------------
| 2 | 1 | B | A |
----------------------------------------------
| 3 | 2 | C | D |
----------------------------------------------
| 4 | 1 | A | B |
----------------------------------------------
| 5 | 2 | D | C |
----------------------------------------------
| 6 | 1 | B | E |
----------------------------------------------
| 7 | 3 | E | F |
----------------------------------------------
你可以看到这里发生的对话。。。A与B(ID 1)进行了交谈,B(ID 2)在C与D(ID 3)开始新对话(CID 2)的大约同一时间进行了回复
A最终就某事(ID 4)返回给B,D最终对C先前的询问(ID 5)做出回应。然后,B和E谈论他和A谈论的同一件事(CID 1),然后E右转并与F连接,开始一次全新的对话
如果这读起来像是在员工立即离职之前发生的步骤,那么这并不是故意的,但你并不孤单
因此,您可以看到每个DB条目都有一个唯一的ID(MessageID),但是这些消息需要很容易地整理在一起
我正在寻找的解决方案是允许DB创建一个新的、唯一的“covalid”。这就是为什么我们不能自动递增,或者为什么我们不能强制数据集的唯一性。重复必须发生,这是本专栏所做的事情的本质,但自动递增可能会做的,与我所寻求的正好相反
任何能为我指明正确方向的帮助都将不胜感激
谢谢 您可以通过添加
Conversations
表来规范设计。该表将有自己的自动递增列。每当一个新的对话开始时,您都会在对话中添加一行,并将其标识符用作corpaid
,我不知道我是否真的得到了它,但为什么不使用发送者+接收者作为主键呢?或者,您可以添加一个唯一约束以确保发件人+收件人是唯一的。该约束应拆分为两个或多个表,但我不清楚确切的要求。如果确实要在单个表中执行此操作,请显式锁定该表,并在插入时使用MAX(convalid)+1作为新的convalid。但我不能推荐这个解决方案。嗯。。。这可能是最简单的方法。lqez提到的想法在我脑海中闪过(一个明确的锁),但我想避免这种情况,因为(我怀疑)他不能推荐。因此,一个带有唯一MessageID的“Messages”表,然后是一个单独的“Conversations”表——其中的每条记录都有自己唯一的a-I分配ID,后跟-比如-第二列逗号分隔的数字,表示Messages表中的MessageID。与我最初的想法相比,听起来更简单的解决方案,并寻求帮助。我打算先做几个测试,但我想我已经有答案了!谢谢测试,工作。正如我所期待的那样。非常感谢,安多玛!:-)