代码之家  ›  专栏  ›  技术社区  ›  Phill Pafford

票务系统问题保留记录id

  •  0
  • Phill Pafford  · 技术社区  · 14 年前

    好的,我们有一个用PHP/PostgreSQL开发的定制票务系统。 它现在的工作原理是输入信息,单击提交,显示票号。

    现在我知道我可以创建一个空白记录并使用该记录id,然后在用户提交时进行更新。

    我想知道有没有更好的/替代的方法?

    • 记录id是主键,自动递增
    • 记录id必须有序,不能跳过记录id号

    有什么想法吗?这是最好的方法吗?

    编辑: 我理解所有的抱怨和我需要做什么来完成要求的行动,看起来我只是要处理空白记录。这不应该经常发生,但我想看看是否有人必须处理这个之前。谢谢你的意见

    4 回复  |  直到 14 年前
        1
  •  2
  •   webbiedave    14 年前

    没有切实可行的办法做到这一点。

    锁定表或使用事务是不谨慎的,因为应用程序必须等待额外的用户输入。这意味着有信息的票之间会有空隙。对客户来说,这是一个愚蠢的要求。你的经理应该做得更好,解释为什么事后才拿到车票号码才是最好的选择(比赛条件):

        2
  •  3
  •   Henry    14 年前

    记录id必须有序,不能跳过记录id号

    有一个问题:当用户1启动一个票证时,他得到了号码234,然后用户2启动一个票证并得到号码235,但是当用户1取消他的票证时,号码234被跳过

    好的,您可以在保存之前再次检查,但是您有一个问题,即在票证开头显示的号码可能不是最终号码。。。

    p、 s:我还没有看到任何一个售票系统在创建新的车票时显示最终的车票号码。。。

        3
  •  0
  •   nortron    14 年前

    不跳过票证号码的要求使我认为票证号码基本上是生成的票证必须包含的有效值的范围。如果是这样的话,我建议将记录的PK与票号分开,并有一个单独的票证预订表,该表本质上对带有时间戳的票证号设置一个锁。空白记录在他们第一次到达时被插入并绑定到预订,当他们完成时被锁定,或者在超时期限到期后进入废弃状态,并且票证号被将来的请求提取。

    希望有帮助。

        4
  •  -1
  •   Community Egal    7 年前

    你可以这样做 Hi-Lo Algorithm 尽管这会否定第二个关键点,除非使用新列存储HiLo

    否则,您就可以处理未完成的票据,或者创建一个cron作业来清除未完成的票据。

    1. 像旧表一样创建新表
    2. 用新表的名称更新表
    3. 放下那张旧桌子

    不过,这确实在大规模上起作用,尽管代码有问题。