有没有理由避免使用bigint作为代理主键?

时间:2015-08-20 20:26:25

标签: sql-server database database-design

我正在设计一个数据库,并且我有许多表可能会超出标准32位int的最大大小。然而,在这种情况发生之前可能还需要几年时间,并且无法保证它甚至可能实际发生。

然而,鉴于它有可能发生,我应该继续为主键选择bigint吗?现在这样做会有什么影响,以后再改变它?是否有可能在以后将int主键转换为bigint,如果是这样,它有多难,是否可行?

2 个答案:

答案 0 :(得分:3)

Going BIG将花费你的存储和性能 - 特别是如果它意味着你的外键引用也必须是BIGINT。

展望未来的“岁月”并不一定是谨慎的事情。预计大多数(并非所有)IT项目将在3年内收回成本。多年来,您很可能不得不应对大量的更改和升级,如果您的数据库在这段时间内增长如此之多,那么在您需要时将INT更改为BIGINT的工作量不应太大。到那时,也许您的业务和数据库世界将会继续前进,这将不再是一个问题。 YAGNI规则。

答案 1 :(得分:2)

本身没有理由避免它。它确实需要更多的存储空间。如果这是主键列,则除非先删除主键,否则无法更改数据类型。假设您命名主键约束,这非常简单。您不必像在lad2025的评论中那样创建一个新列并完成所有hocus pocus废话。

create table IntTest
(
    MyID int identity 
    , SomveValue uniqueidentifier
    , constraint IntTest_PK primary key clustered (MyID)
)

insert IntTest
select NEWID()
from sys.all_columns

alter table IntTest drop constraint IntTest_PK

alter table IntTest alter column MyID BigInt

alter table IntTest add constraint IntTest_PK primary key clustered (MyID)