自然键VS代理键

主键和外键

外键:引用其他表的主键,为了保证数据的一致性

自然键(Natural Key)

已经真实存在的键,通常具有商业含义,比如身份证ID,护照编码等等。可以是单键(经常被用于搜索条件,例如查快递信息,需要输入快递单号,快递单号就是单键),也可以是复合键。

代理键(Surrogate Key)

完全没有商业含义,通常由当下的系统自动生成,都是单键没有复合键(做月份的维度,代理键的值可能为123456但是不代表 1对应1月份,2对应2月份)

在每个代理键为主键的表中,尤其维度表,必定有自然键作为可选键(在数据仓库里为了能够记录每个实体的所有变化通常会加一个时间标记列作为联合组键,但同时也得保留原来的两个自然键)。绝对不允许仅仅只存在一个代理键而没有自然键的现象。

自然键灵活性:

1.主键不可以修改,实体主键变化会带来外键相关的连锁反应。当选择用原来的自然键作为主键一旦需要修改,只能删除重做,而且这个自然键又是其他表的外键,就会有连锁反应。

2.新系统接入时,合并维度存在一定困难。

代理键灵活性:

1.代理键本身无意义,可以修改原自然键内容

2.新系统接入时,合并维度表相对简单

checksum_cd:输入不定长度的信息时,可以输出固定长度的算法。

代理键绝对不可以对用户可见,通常用于Join,而不用于where的搜索条件,此外代理键的命名规则要非常明确,比如XXXX_SK

原因:1.代理键毫无商业意义,暴露给用户只会误导用户

           2.系统迁移等环境变更,由于代理键是系统生成的,会造成相同自然键的代理键不一致

           3.使程序员根据名字能够轻易判断出是否具有代理键,避免错误使用

自然键程序编写:

1.对事实表而言,如需要按照自然键直接搜索,则可以不用关联到维度表。

2.如果维度表是复合主键,则程序书写更复杂

代理键程序编写:

1.由于代理键无法直接作为查询条件,因此必须关联到维度表进行关联查询

2.代理键模式更简单

自然键查询性能:

1.如果维度表的自然键是varchar等类型,并且是符合键,性能相对较差

代理键查询性能:

1.代理键均为整型,查询性能较好(代理键性能较好)。

自然键存储空间:

维度表而言,须更少空间;事实表而言,视各个维度键值数据类型而定,通常需要更多空间,总体来看占用空间

代理键存储空间:

维度表而言,需要更多空间;事实表而言,视各个维度键值数据类型而定,通常需要更少空间,总体看来占用空间更少

对于数据仓库来说,大部分数据都在事实表里,维度表占点空间也无所谓。

自然键数据加载:

就维度表而言,直接从源系统过数据,除正常转换外没有额外的开销

代理键数据加载:

就维度表而言,代理键插入须计算最新插入的代理键值

-- ETL处理中 生成代理键:select max+1 : select max(skey)from table +1

代理键使用的其他场景

1.完全没有主键的数据:流水作业的数据没有主键,加一个代理键为主键

2.分布式结构数据库,多联合主键的事实表,为了分区方便,创建单独的代理键以避免数据分区的偏移

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代理自然和持久是数据库中用于标识记录的不同方式。 1. 代理(Surrogate Key):代理是人工创建的一个用于唯一标识记录的,通常是一个自增整数或全局唯一标识符(GUID)。代理与具体记录的属性没有直接关联,仅用于唯一标识和关联记录。代理的主要优点是简化了数据关系的管理,可以避免使用具有业务含义的属性作为主,而且可以方便地进行数据合并和分割。但代理没有直接意义,对于用户来说不太直观。 2. 自然(Natural Key):自然是数据库中已存在的、具有实际含义的属性作为主自然通常与记录的业务属性相关,比如身份证号、手机号等。自然的优点是直观且具有实际意义,对于用户来说易于理解和记忆。然而,自然可能会面临数据不唯一性、长度较大、变更困难等问题。 3. 持久(Persistent Key):持久是一种特殊类型的自然,它在数据发生变化时仍然保持不变。持久可以是一个稳定且不会改变的属性,比如国际统一编号(如ISBN、SSN)等。持久在数据迁移、数据合并和数据一致性方面具有优势,但是要保证持久的唯一性和稳定性可能需要额外的管理和维护。 总结:代理是人工创建的用于唯一标识记录的自然是已存在的具有实际含义的属性作为主,持久是一种稳定且不会改变的自然。选择使用哪种取决于具体的业务需求和数据特点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值