数据库每行自动编号生成器与每行手动编号的优缺点



想象两个表实现如下描述:

  1. 数据库系统管理自动创建的第一个表行号
  2. 程序员按顺序手动创建的第二表行数

主要问题是这两种方法的优点和缺点是什么?

与手动创建自动编号相比,让数据库管理自动编号的一个明显优势是数据库实现是线程安全的,而手动创建它们通常是(99.9%的情况(不是(很难正确执行(。

另一方面,数据库实现不能保证按顺序编号——数字中可能存在空白。

考虑到这两个事实,当自动递增列的值没有任何商业意义时,该列应仅用作代理键,但它们仅用作简单的行标识符。

请注意,当使用代理密钥时,最好还强制自然密钥的唯一性,否则您可能会得到除代理密钥外所有数据都重复的行。

当数据库自动创建数字时,您的工作量会减少。想想一个注册系统,你有名字、电子邮件、密码等字段:

1.(数字是由数据库生成的,因此您可以将数据插入表中。

2.(如果不是这样,你必须得到最后一个数字,所以在插入之前,你必须获得最后一个id,所以插入时你有一个select+insert。

另一个原因是,删除表中的一行时发生了什么?也许在论坛中,你想删除该帐户,但不是删除他的所有帖子,所以你可以找到一个变通方法,当帖子没有提供user_id时,你知道这是/曾经是一个被删除或禁止的帐户-如果你给一个新用户一个已删除用户的号码,你就会遇到麻烦。

最新更新