对于“订单”表,“身份增量”的价值很高

时间:2008-09-20 02:49:12

标签: sql

“订单”表的身份增量有什么好处? (购物车订单中的订单)

我想要显示订单号,以便我们获得的订单数量超过我们的实际数量,并且在可能出现问题的情况下,让用户更难猜测其他用户的订单号。

我不想要太大的值,以至于我可能会耗尽价值,而且我也不希望明显的序列显而易见。

我现在已经42岁了

10 个答案:

答案 0 :(得分:3)

向最终用户公开ID通常不是一个好的(安全性)想法。

我会使用普通的+1自动增量ID列,并且用户可见的订单号是基于当前日期的字符串。也许今天到目前为止使用日期+订单数量:“20080919336”。

答案 1 :(得分:2)

我想说最重要的是让你的身份种子开始高达156,786或其他什么。至于增量,使用奇怪的东西可能是好的,所以不是所有的订单数都是偶数。

但我必须说,最好不要将Identity字段用于将向用户公开的订单#。通常最好将这些内容隐藏在数据库中,并为订单号分配一个单独的字段。这样,您可以更改订单号而不会弄乱所有引用。您的所有其他表将引用Identity字段(应该是您的主键),然后您可以在另一个Order#字段上打一个索引以使其保持唯一。

你以后会感谢我。

答案 2 :(得分:2)

为什么增量?使用GUID会使订单数量不合适,并且几乎无法猜测订单网址(显然,您仍然需要检查查看是否有人查看订单看到它。)

如果您决定使用单调递增的整数ID,那么只需估算出在您用完之前您将拥有多少订单。但是如果有人能看到其中的一小部分并猜测序列增量数,那么它们总是可以猜到的。然后他们就会知道你有多少订单,并且能够整天猜测网址。

答案 3 :(得分:2)

如果你想让它看起来有更多的订单而不是真正的,只需选择一个任意大的id号码开始。但是,如果是我,我只是将增量设置为1.为了防止用户猜测订单号,混淆数字可能不是最佳方式。

如果我是用户123,并且我下了一个订单号4567,那么让我们说要查看订单的网址如下:

  
    

http://example.com/orders?id=4567

  

说我感觉很恶心,决定开始玩那个网址。如果我尝试怎么办?

  
    

http://example.com/orders?id=5000

  

如果还没有订单5000,它会显示什么?那么简单的“无效订单ID”。但是,然后,说我试试:

  
    

http://example.com/orders?id=4568

  

如果订单显示订单,那该订单确实存在?它可以检查创建订单的用户的ID,除非是我(好老用户#123),否则显示相同的错误消息“无效的订单ID”。这可能使用户无法判断是否存在任何给定的订单ID,除非他们自己创建订单。

答案 4 :(得分:0)

您可以使用非数字订单参考代码,例如“ABC0123”。取决于您的平台,但您可以将其用作表的主键,或者使用自动递增的标识符(这将简单地成为内部参考)。

另外:如果用户猜测订单号是个问题,那么你真的需要考虑一些安全措施。

答案 5 :(得分:0)

您可以使用inonity值。只需将种子设置为高,然后将种子设置为高温。

[ID] [int] IDENTITY(5497,73) NOT NULL,

我有一种感觉,如果人们看到他们是第1号订单,他们就不会在意。我要做的是将其设置为300万,增量为1.这将是一个很大的数字,然后上升。如果你认为人们不买,你总是可以重新选择它,因为他们是第五个订购的人。

答案 6 :(得分:0)

虽然这是一切的答案但是这个问题,42不是一个好赌注。

一种可能性是您使用客户ID和附加的增量编号...但在这种情况下,这不会是订单表上种子的“身份增量”。

示例:JoeBlow在customers表中的ID为56,其第18个订单(5618) 并且为了进一步掩盖你的订单数量(?)你可以在你喜欢的那些行上做任何其他事情,追加毫秒/随机或类似的东西。这是一个简单的例子

答案 7 :(得分:0)

为什么不拥有一个随机数池,然后从你的池中取下一个随机数?这可以通过获取一些数据(用户ID和计数器)并使用一些加密/散列算法来完成。

答案 8 :(得分:0)

  1. 创建一个递增的Int作为您的内部PK。为您的存储和索引性能提供卓越的填充因子。
  2. 创建哈希,复合密钥或GUID作为外部AK - 此值应该是在表单上公开的值。美国驱动程序许可证#是设计复合密钥的一个很好的例子 - 由唯一随机数加上一些任意组合生成驱动程序名称字符。
  3. 永远不会将GUID作为群集索引 - 它会导致可怕的页面填充问题

答案 9 :(得分:0)

执行此操作的一种简单方法是像已经建议的那样启动高位并使用增量1.当您必须向用户显示此订单号时,将其反转并附加1。

因此,订单64010将成为101046

如果Id以零结尾,我必须附加1。

用户会看到一些似乎没有模式的高数字,并且很难猜测使用的模式。

最好在表格中添加一个名为OrderNumber的列,这只是Id的反转。这样可以防止您在调试时错误地检查Id的特定订单号:)