在数据库表中插入主键时,为什么将负ID或零视为不良做法?
我认为它在某些情况下可能有用,但人们说不推荐,尽管他们从不说/知道原因。
所以,我想知道是否存在,根据定义,是否存在某些限制,或者它是否应该没有任何问题,或者它是否只是一个约定,如果确实存在一些限制,为什么不阻止该功能?
答案 0 :(得分:25)
要清楚,这个问题和答案是关于使用代号键的负数而不是自然键。
据我所知,有三个理由认为这是一种不好的做法。
第一个有一定的效力。您永远不会在SO上看到使用负ID号的SQL示例或答案。 (我将从今天开始改变它。)
第二个和第三个是第一个的推论,因为程序员经常假设没有惊喜的行为。 (这让我想起发现VBA会让我乘以两个日期,返回一个可以用方形日期表达的数字。)
对于2号,应用程序员可能会因为不允许登录UI代码而引入细微错误,这可能会使-123456看起来像123456.
第三个与编写返回id号的代码有关。返回单个id号的代码可能会返回-1作为错误代码。但在大多数情况下,-1是有效的ID号。 (大多数数据库不会将id号限制在非负整数范围内。)
答案 1 :(得分:9)
@Mike Sherrill的回答' Cat Recall'是恕我直言。
否定:不对ID使用否定的原因是负数不可移植。十进制值的二进制表示取决于基础数值体系结构,这会影响负十进制值以非负流式格式(例如,十六进制,base36等)呈现的方式。类似地,一个人不使用浮点值作为标识符,即使在单一架构的约束下,它在理论上也是可能的。
零:零可以作为ID。不建议这样做,因为它通常表示空字段/ NULL值。
答案 2 :(得分:0)
有超过5100万个网站在讨论这个问题。
我同意@Mike Sherrill并且很可能常见的是NULLs / Empty字段或Negative Ids在确定真值时会产生严重问题。它完全没有任何信息用途,只会导致数据库本身的错误答案和不信任。
允许零值,列中的负值会为数据库带来全新的不确定性。必须由SQL程序员进行猜测,以便对数据库中NULL值的错误结果进行计数。