Sql 什么是'的好价值;身份增量';对于';订单';桌子
对于“Orders”表,标识增量的好值是什么?(订单与购物车订单相同) 我希望订单号能够显示出来,这样我们就有了比实际更多的订单,并且在可能出现问题的情况下,让用户更难猜测其他用户的订单号 我不想要太大的值,这样我可能会用完值,我也不希望一个明显的序列 现在我已经确定了42个向最终用户公开ID通常不是一个好的(安全)主意Sql 什么是'的好价值;身份增量';对于';订单';桌子,sql,Sql,对于“Orders”表,标识增量的好值是什么?(订单与购物车订单相同) 我希望订单号能够显示出来,这样我们就有了比实际更多的订单,并且在可能出现问题的情况下,让用户更难猜测其他用户的订单号 我不想要太大的值,这样我可能会用完值,我也不希望一个明显的序列 现在我已经确定了42个向最终用户公开ID通常不是一个好的(安全)主意 我将使用一个普通的+1自动增量ID列,并将用户可见的订单号设置为一个基于当前日期的字符串。也许今天使用日期+订单数量:“20080919336”。我想说的是,最重要的是让你的身
我将使用一个普通的+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和计数器)并使用一些加密/哈希算法来实现
一个简单的方法是从高开始,就像已经建议的那样,使用1的增量。当您必须向用户显示此订单号时,请将其反转并附加1 因此,64010号订单将变成101046号订单 如果
Id
以零结尾,我必须附加1
用户将看到一些似乎没有模式的高数字,并且很难猜测所使用的模式
最好是在表中有一个名为
OrderNumber
的列,它只是Id
的反转。这将防止您在调试时错误地检查特定订单号的Id:)考虑到规范,这是一个很好的解决方案。我将使用自动生成的编号,而不依赖max。更简单,也更容易使用