非规范化字段的命名约定

时间:2011-03-25 20:23:37

标签: database naming-conventions

在对性能进行非规范化时使用特殊的命名约定是否常见?

例如,假设您有一个customer表,其中包含date_of_birth列。然后,您可以添加age_range列,因为有时候计算该客户的年龄范围太昂贵了。然而,人们可能会看到这种情况变得混乱,因为不清楚哪些值是权威的,哪些值是派生的。所以也许你想要列出那个列denormalized_age_range或其他东西。

对这些列使用特殊的命名约定是否常见?如果是这样,是否有针对此类事项建立的命名约定?

编辑:这是另一个更现实的例子,说明非规范化会给你带来性能提升。这是来自现实案例。假设您正在编写一个应用程序,可以跟踪美国所有大学的大学课程。如果您选择该学位,您需要能够为每个学位展示您毕业的学分数。学位课程的学分计算实际上非常复杂,需要很长时间(每学位超过一秒)。如果您有一个比较100个不同学位的报告,那么动态计算学分计数是不切实际的。我在遇到此问题时所做的是我在credit_count表中添加了degree列,并预先计算了每个学位的学分计数。这解决了性能问题。

4 个答案:

答案 0 :(得分:1)

我看到列名称在表示这种值时会使用“derived”这个词。我还没有看到其他种类的非规范化的通用样式指南。

我应该补充一点,在我看过的每一个案例中,派生值总是被认为是派生它的数据的次要值。

答案 1 :(得分:0)

如果导出计算所需的所有值都已在表中,则不太可能通过保留这些计算值来获得任何有意义(甚至可衡量)的性能优势。

我意识到这并没有直接回答这个问题,但似乎前提是错误的:如果要应用这个问题存在这样的条件,那么你就不需要对其进行反规范化。

答案 2 :(得分:0)

在某些编程语言中,例如Java,具有_前缀的变量名用于私有方法或变量。私有意味着它不应该被类外的任何方法修改/调用。

我想知道这个约定是否可以在命名派生数据库列中借用。

在Postgres中,列名称可以_开头,例如_average_product_price

它可以表达您可以读取此列的含义,但不要写它,因为它是派生的。

答案 3 :(得分:0)

我现在处于相同的情况,设计一个可以受益于中心值非规范化的数据库模式。例如,表分区要求分区键存在于表中。因此,即使可以通过遵循某些级别的外键来检索数据,我也需要大多数表中的数据。

也许可以使用后缀" copy" 。因为毕竟,数据只是存储主数据的其他位置的副本。因为它是一个单词,它可以使用所有命名约定,例如.NET PascalCase,它可以映射到SQL snake_case,e。 G。 CompanyIdCopycompany_id_copy。这是一个简短的词,所以你不必写太多。并且它不是缩写,所以你不必拼写它或者想知道它意味着什么。 ; - )

我还可以想到后缀"缓存"或者"缓存"但是缓存通常按需填充并在一段时间后失效,这通常不是非规范化列的情况。该数据应始终存在,永远不会过时或丢失。

"派生"只是比#34;复制"。我知道一个特殊的DBMS,一个昂贵的DBMS,其列名限制为30个字符,所以这可能是一个问题。