在大学的最后一课中(我是学生),讲师要求我们开发数据库(如果重要的话,请使用MySQL Server)和小型客户端应用程序,该应用程序会将数据库用作数据源。
要求之一是,身份列(每个表中的PK)必须是顺序的,因为这是一种好习惯(按照讲师的话)。也就是说,当删除表行时,必须在后续插入中重用它的PK。我对RDBMS,PK和标识列有一般的了解。据我了解,标识列只是让数据库在插入行时自动生成PK的一种方式。标识列值不得以任何方式与行属性相关(只要它不是自然键即可)。
这个要求(严格按照顺序标识列)对我来说是可疑的。我试图问讲师,如果身份不是顺序的(由于删除引起的空白),那又有什么问题,但是却得到了非常抽象的答案,例如“它对用户方便,对维护数据库的数据库管理员有用”。没有具体的例子。“方便用户”这一说法听起来很愚蠢,因为它在业务领域没有任何意义。
因此,我很好奇这些原因是否真实?我只想到一种情况,即需要重新分配标识列种子时–当标识空间用尽时。但是,当标识列类型选择不正确时,例如用“ simple” int
代替,bigint
或者uniqueidentifier
表包含十亿行时,这将是更多的设计问题。假设身份列是聚集索引:身份列中的间隙会影响索引性能吗?也许还有其他现实原因导致我不知道的每次删除后重新自动标识列的种子?
提前致谢!