zoukankan      html  css  js  c++  java
  • 数据仓库系列3-键

    数仓模型是非常重要的,模型中键又是重中之重。

    今天简单讨论一下键。

    候选键包含主键 和可选建,主键可以作为其它表的外键。

    主键的生成方式分为两类:自然键和代理键。

    主键都比较好懂,就是唯一键,重点说一下自然键和代理键。

    自然键和代理键的有啥区别呢?

    自然键是已经真实存在的键,通常具有商业意义,比如emploeeid,employee_name等,可以是单键也可以是复合键。

    代理键通常没有商业意义,通常由系统自动生成,只能是单键。

    在每个代理键为主键的表中,特别维度表,必定有自然键作为可选键,绝对不允许仅仅存在一个代理键而没有自然键的现象,因为代理键没有自然键就没有意义。

    在设计模型中,一般需要考虑代理建作为主键,为啥呢?

    1、在模型中如果如果自然键作为主键的话,有时会涉及到一些很多外键,如有需求需要修改主键,那么会引起一连串的反应。但是如果用代理键作为主键的话,因为代理键本身没意义,只需要修改代理键对应的自然健就ok了。

    2、自然健为主键在新老系统合并中,比较困难,如果是代理键就比较简单了。

    代理键绝对不可以对用户可见,通常是用来join,而不是where的搜索条件。通常情况下代理键的命名规则要规范,带有后缀,比如xxxx_sk等

    主要原因呢,1、代理键毫无意义,暴露给用户会导致客户体验差。2、如果保存数据字典中,对于程序员根据名字就能很快的判断出是否是代理键,避免错误的使用。3、也是比较重要的一点,如果涉及到系统迁移,因为代理键都是自动生成的,会造成相同自然键的代理键不一致,造成混乱。

    创建代理键的方法:

    1、系统自动生成,比如序列号

    2、ETL程序中max+1

    3、创建一张维护表,通过表来维护

    4、高低位法,xxx-yyyy,根据不同规则代表不用含义来表示

    5、UUID,GUID mac地址+时间戳等。

    代理键使用的其它场景

    1、完全没有主键的数据表。

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

    有时业务查询自然键频繁,需要两表关联时,可以把另外一张表的自然健,放到查询的这张表中,也就是逆规范化,先进行三范式规范化,再根据需求进行逆规范化。

    先写这么多吧,其实还有代理键节省空间,查询效率比较高等。

  • 相关阅读:
    Eclipse Java注释模板设置详解
    windows server 2008 配置安装AD 域控制器
    linux 用户、用户组不能是全数字
    python if __name__ == '__main__'解析
    完美解决:Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x
    yum Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
    在Eclipse中手动安装pydev插件,eclipse开发python环境配置
    xp系统打开软件程序总是弹出警告窗口,很烦人对不,怎么办呢?进来看
    UliPad双击没反应,UliPad打不开
    安装Django,运行django-admin.py startproject 工程名,后不出现指定的工程解决办法!!
  • 原文地址:https://www.cnblogs.com/wujin/p/6105677.html
Copyright © 2011-2022 走看看