云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云主机_大主宰txt百度云_高性能

小七 141 0

何时(以及如何)使用代理键

博客一般指南选择主键结合自然和代理示例正如那些看过我最近与Sisense ElastiCube一起参加的"数据建模基础知识"网络研讨会的人可能还记得,主键是给数据库中的记录指定的唯一标识符,我们可以在查询数据库或连接多个源时使用它。本文将讨论代理键的概念,并展示一些何时以及如何使用简单SQL应用它们的示例。选择主键的一般准则在深入讨论自然键与代理键之前,让我们回顾一下为数据模型选择主键时要遵循的四条重要规则:每个记录的主键必须是唯一的。具有重复项的主键将导致具有重复计数和总计的不准确查询。如果两个客户被分配了相同的主键,他们的销售活动将被无意地混合在一起。如果客户被意外复制,他们的销售活动也将被复制。数据库架构师将此称为引用丢失正直。那个主键必须对所有记录应用统一的规则。无论您的密钥是严格的数字、字母数字还是随机系统生成的值,每个记录都必须以一致的格式编程。不管业务需求有多复杂,这种格式都必须存在。格式不一致可能导致数据分析困难,尤其是在父/子数据中关系主键必须经得起时间的考验。一个基于当前上下文数据的键,以后可能不具有相同的上下文含义。例如,如果客户ID密钥基于客户名称,那么当客户被收购或重组时会发生什么情况?应不惜一切代价避免更改密钥格式。更改键将需要更改在任何联接或WHERE子句中引用新键的所有存储过程,以及更新所有数据库中对旧键的所有现有引用桌子。那个主键必须是只读的。为了经得起时间的考验,不应编辑主键。编辑后的主键可能会有打字错误(123123对132123),根据用户的偏好(1对000001)改变格式,并允许覆盖先前删除的记录。绝不允许任何人编辑主键的值。选择主键:代理键与自然键首先,让我们看一下这两种主键形式之间的区别:例如,我们可能会使用另一个包含日期的关键字来连接表(例如,在存储表中使用一个自然的日期键,或者在存储表中使用一个包含日期的关键字)。自然密钥可以由系统生成,但自然密钥至少部分由手动过程确定。有些自然键完全是手动生成的。自然密钥的最广泛应用之一是股票代码,即MSFT、APPL和GOOGL。当语境意义很重要时,自然键是一个很好的主键。代理键是一个没有任何上下文或业务含义的键。它是"人工"制造的,仅用于数据分析。代理项密钥最常用的版本是递增的顺序整数或"计数器"值(即1、2、3)。代理项密钥还可以包括当前系统日期/时间戳,或随机的字母数字字符串。请参见Sisense的行动:浏览仪表板在数据模型中什么时候应该坚持使用自然键?自然键的主要优势在于它们的简单性以及数据保持其原始上下文的事实。对于查看数据的人来说,它们通常(相对)容易识别,并且依赖于自然键减少了使用自定义SQL丰富数据的需要。另外:自然键对于数据库中的多种数据类型非常有用。自然键允许用户轻松地从键中识别数据类型,即使多个数据类型使用相似的键格式。金融数据库经常使用一个自然的和顺序的密钥一起格式化它们的密钥。费用报告:ER-123时间表:TS-123应收账款发票:INV-123尽管这三个记录都包含一个123的顺序ID,但是自然键前缀允许用户立即识别不同的数据类型。自然当用两种不同的主键格式连接两个系统时,密钥工作得很好。例如,我们可以使用Salesforce客户ID:001D000000IRt53Quickbooks客户ID:MSFT创造自然关键客户ID:001D000000IRt53\u MSFT自然键使GUI更易于理解。像GOOGL这样的客户ID很容易被用户识别(例如,您可能知道这个股票代码是Google的)。更容易识别也更容易搜索。使用自然键的缺点虽然依赖现有的自然键可能很诱人,而且最初更容易依赖,但在扩展数据模型时,或者在更复杂的环境中,这可能会证明是有问题的,我们将使用股票行情机的示例来演示:自然键并不为每个记录应用统一的规则。自然键中的指示符或变量使密钥在事后很难查询和理解。P*U的股票代号包括P和股票代号,其中P和股票代号返回P,不管这个符号是优先股还是不,很自然钥匙经不起时间的考验。本来可能是商业意义的符号可能会变得毫无意义,或者在未来具有不同的含义。因此,例如,GOOG和GOOGL这两个符号并不能准确地代表公司从Google到字母表。自然的钥匙很容易相互混淆。与前一个例子一样,当Twitter准备以TWTR股票上市时,许多投资者从一家名为Tweeter的已倒闭电子公司购买股票,并以TWTRQ交易。由于TWTR和TWTRQ包含相同的前四个字母,许多投资者无意中投资了错误的股票。Tweeter后来把股票代码改成了GQ,这也可能被误解为GQ杂志(condenast旗下的一家私人控股公司)。使用代理密钥的优点如前所述,代理键牺牲了数据的一些原始上下文。但是,由于以下原因,它对于分析目的非常有用:代理密钥是唯一的。因为代理项密钥是系统生成的,所以系统不可能创建和存储重复项值。代理键对所有记录应用统一的规则。代理项键值是程序的结果,该程序创建系统生成的值。作为程序结果创建的任何密钥将对每个密钥应用统一的规则记录。代理人钥匙经得起时间的考验。因为代理键缺少任何上下文或业务含义,所以不需要在未来。代孕键允许无限值。顺序键、时间戳键和随机键对唯一组合没有实际限制。组合自然键和代理键某些业务场景可能需要保持自然密钥的完整性,以便用户与数据库交互。在这种情况下…如果建议使用自然键,请使用代理键字段作为主键,使用自然键作为外键。虽然用户可以与自然密钥交互,但数据库仍然可以在用户视图之外拥有代理密钥,而不会对用户造成中断经验。如果自然键必须在没有附加代理项的情况下使用,请确保将其与代理项键元素结合使用。在我们的财务数据库示例中,开支报告(ER-123)有一个自然键与一个代理顺序键结合使用。这种格式可以防止上面列出的许多自然的关键副作用。使用自定义SQL添加代理项键的示例在下面的示例中,我们将查看一个包含产品价格历史数据的表。通过在Sisense Elasticube管理器中使用自定义SQL表达式,我们创建了代理项关键字ProdDate_关键字,在本例中,它是通过将其他字段组合成一个单独的、唯一的标识符来创建的,该标识符可以在以后方便地查询。原件:用于添加代理项键的SQL:选择不同tostring(ProductID)+'''+tostring(getyear(Date))+'-'+tostring(getmonth(Date))+'-'+tostring(Getday(Date))作为Prod_Date_键,日期,产品ID,普赖斯博士从[ProductListPriceHistory]PH加入[AllDates],日期介于起始日期以及博士结束日期结果:要主数据建模吗?观看我们的随需应变网络研讨会,学习每个分析师应该具备的基本技能。标记:数据建模|如何操作| SQL