有关数据库id字段的自动生成方法:GUID

GUID(全球唯一标识符):

优点
  1. 全球唯一性:

    • GUID 可以确保在全球范围内生成的 ID 是唯一的,这对于分布式系统、跨数据库和跨应用的数据合并非常有用。
  2. 去中心化:

    • GUID 的生成不依赖于数据库,可以在任何地方(客户端或服务器)生成,而不需要查询数据库获取一个新 ID。因此,适用于分布式系统或离线场景。
  3. 防猜测性:

    • GUID 是一个随机字符串,难以预测或枚举,这对安全性有好处,特别是在需要隐藏 ID 的场景中。
  4. 减少冲突:

    • 在高并发的场景下,生成唯一的 GUID 比生成连续的自增 ID 产生冲突的概率更低。
缺点
  1. 存储空间占用大:

    • GUID 通常是 128 位(16 字节),而传统的整型自增 ID 通常是 4 或 8 字节。因此,GUID 占用的存储空间更大,会导致数据库索引变大、性能下降。
  2. 索引性能差:

    • GUID 是随机生成的,因此插入操作会导致索引频繁分裂,降低性能。相比之下,自增 ID 可以保持索引有序。
  3. 可读性差:

    • GUID 不易读或记忆,不便于调试和数据分析。
  4. 排序困难:

    • GUID 的随机性使得按顺序排列变得复杂,而连续的自增 ID 在排序和分页方面更高效。
使用
数据库定义:
`ID` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'UID',
生成:

可写在工具类

public static string GetGUID
{
    get
    {
        //Guid 是一个结构(struct),表示一个 128 位的全局唯一标识符。
        //NewGuid() 是一个静态方法,生成一个新的 GUID。
        return Guid.NewGuid().ToString().ToUpper();
    }
}
在需要的地方使用:

主流的数据库 ID 字段生成方法

  1. 自增 ID(Auto-Increment/Identity):

    • 描述: 这是最常见的 ID 生成方式,由数据库自动递增生成。每插入一条新记录,数据库会自动分配一个新的连续整数 ID。
    • 优点: 简单、高效,占用空间小,索引有序。
    • 缺点: 不能跨数据库或分布式系统使用,会暴露插入数量,存在并发冲突的可能。
  2. UUID / GUID:

    • 描述: GUID(Globally Unique Identifier)或 UUID(Universally Unique Identifier)是一个 128 位的唯一标识符,通常以十六进制表示。
    • 优点: 全球唯一、不依赖中心化生成机制、适用于分布式系统。
    • 缺点: 占用存储空间大,索引性能差,难以阅读。
  3. 组合键(Composite Key):

    • 描述: 由多个字段组合生成一个唯一键。例如,(RegionID, CustomerID)
    • 优点: 可以确保每个字段的组合是唯一的,适合联合查询和多表关联。
    • 缺点: 维护复杂,尤其在多表联接时性能可能较差。
  4. 自定义生成策略:

    • 描述: 使用自定义逻辑生成 ID,例如根据时间戳、服务器节点、序列号等生成。
    • 优点: 灵活性高,可以优化性能,适应特定的应用场景。
    • 缺点: 实现复杂,需要精心设计和测试,可能会产生冲突。
  5. 雪花算法(Snowflake ID):

    • 描述: Twitter 开发的生成唯一 ID 的算法,使用 64 位整数(8 字节)表示,其中包含时间戳、机器 ID 和序列号。
    • 优点: 高效、短小、全球唯一,适合分布式系统。
    • 缺点: 依赖服务器时钟,需确保时钟同步,否则可能生成重复 ID。
  6. 数据库序列(Database Sequence):

    • 描述: 在 Oracle、PostgreSQL 等数据库中,序列是一种生成唯一数字的对象,可以作为主键。
    • 优点: 灵活、可以控制步长、最小值、最大值等。
    • 缺点: 不适用于跨数据库或分布式系统。
  7. 短 ID(Short ID)或哈希 ID:

    • 描述: 使用哈希算法或短 ID 库生成简短的唯一字符串,例如 Base64 编码、Hashids 等。
    • 优点: 紧凑、易于记忆,可以隐藏数据实际数量。
    • 缺点: 有一定的碰撞概率,通常只适用于小规模系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值