Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 什么是'的好价值;身份增量';对于';订单';桌子_Sql - Fatal编程技术网

Sql 什么是'的好价值;身份增量';对于';订单';桌子

Sql 什么是'的好价值;身份增量';对于';订单';桌子,sql,Sql,对于“Orders”表,标识增量的好值是什么?(订单与购物车订单相同) 我希望订单号能够显示出来,这样我们就有了比实际更多的订单,并且在可能出现问题的情况下,让用户更难猜测其他用户的订单号 我不想要太大的值,这样我可能会用完值,我也不希望一个明显的序列 现在我已经确定了42个向最终用户公开ID通常不是一个好的(安全)主意 我将使用一个普通的+1自动增量ID列,并将用户可见的订单号设置为一个基于当前日期的字符串。也许今天使用日期+订单数量:“20080919336”。我想说的是,最重要的是让你的身

对于“Orders”表,标识增量的好值是什么?(订单与购物车订单相同)

我希望订单号能够显示出来,这样我们就有了比实际更多的订单,并且在可能出现问题的情况下,让用户更难猜测其他用户的订单号

我不想要太大的值,这样我可能会用完值,我也不希望一个明显的序列

现在我已经确定了42个

向最终用户公开ID通常不是一个好的(安全)主意


我将使用一个普通的+1自动增量ID列,并将用户可见的订单号设置为一个基于当前日期的字符串。也许今天使用日期+订单数量:“20080919336”。

我想说的是,最重要的是让你的身份种子从156786之类的高起点开始。至于增量,最好使用奇数,这样不是所有订单号都是偶数

但是,我必须说,最好不要对将向用户公开的订单使用标识字段。通常最好将这些内容隐藏在数据库中,并为订单号设置单独的字段。这样,您可以更改订单号,而不会弄乱所有参考资料。所有其他表都将引用标识字段(应该是主键),然后您可以在其他顺序字段上添加索引以保持其唯一性


您稍后会感谢我。

您可以使用非数字订单参考代码,如“ABC0123”。取决于您的平台,但您可以将其用作表的主键,也可以将其添加到自动递增的标识符(该标识符随后将成为内部引用)之外

另外:如果用户猜测订单号是一个问题,您确实需要考虑一些安全措施。

为什么要增加?使用a会使订单数量变得不可用,并且几乎不可能猜测订单URL(显然,您仍然需要检查查看该订单的人是否有权查看)


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

您可以使用不确定性值。只要把种子放高,然后把它摘下来

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

我有一种感觉,如果人们看到他们是1号订单,他们不会在意。我要做的是将其设置为300万,增量为1。这将是一个很大的数字,而且会上升。如果你认为人们不买,因为他们是第五个要订购的人,那么你可以随时为它重新设定种子。

虽然这是除了这个问题以外的所有问题的答案,但42不是一个好的选择

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

示例:JoeBlow在customers表中的ID为56,这是他的第18个订单(5618)
为了进一步掩盖订单数量(?),你可以按照你喜欢的方式做任何事情,附加millseconds/random或类似的东西。这是一个简单的示例

如果您想让订单看起来比实际订单多,只需选择一个任意大的id号开始。但是,如果是我,我会将增量设置为1。为了避免用户猜测订单号,混淆订单号可能不是最好的方法

如果我是用户123,我下了一个订单,编号为4567,假设查看订单的url如下所示:

说我感觉很淘气,然后决定开始玩那个网址。如果我尝试:

如果还没有5000号订单,它会显示什么?像“无效订单id”这样简单的东西怎么样。但是,如果我尝试:


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

为什么不创建一个随机数池,然后从您的池中获取下一个随机数?这可以通过获取一些数据(用户id和计数器)并使用一些加密/哈希算法来实现

  • 创建一个递增整数作为您的内部主键。为您的存储和索引性能提供优异的填充系数
  • 创建一个散列、复合密钥或GUID作为外部AK-该值应该是表单等中公开的值。美国驾驶执照是人工复合密钥的一个很好的例子-由唯一的随机数加上一些驾驶员姓名字符的任意组合生成
  • 从不使用GUID作为聚集索引-它会导致严重的页面填充问题

  • 一个简单的方法是从高开始,就像已经建议的那样,使用1的增量。当您必须向用户显示此订单号时,请将其反转并附加1

    因此,64010号订单将变成101046号订单

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

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


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

    考虑到规范,这是一个很好的解决方案。我将使用自动生成的编号,而不依赖max。更简单,也更容易使用