zoukankan      html  css  js  c++  java
  • SQL反模式-1

    SQL反模式讲了很多数据库设计中遇到的难题。跟我最近的工作很相关。因此特意拜读了下。本文主要讲解“多值列”和“幼稚的树”

    多值列要分成映射表,比如(A,B),其中B是多值的列,则应该把A和B分开,然后为B单独建一张表,并在其中加入指向A的外键。这样做可以确保对B的某个值进行查询时效率较高。

    还有一种比较特殊的结构,父亲-儿子关系表。比如 employee和经理的管理。通常情况下经理有层次结构,某个的人同时是经理和employee。如果要查询某个经理下所有的employee时,通常需要逐级的下钻。如果以此为维度表,去join一个employee的事实,则导致性能上的问题。

    一种可能的做法是在在employee的事实表中增加一列,用来表示该employee到其ancestors的根路径。这样可以很容易找到一个employee所有的父亲,或者一个ancestors的所有孩子。这样的话,查询层次结构只需要一次就可以了。

    还有一种方式是增加一个打平的ancestor表,这表有两列,一列存放所有的employee,另一列存放它管辖的employee,每一行表示一个manager和employee的管辖关系。比较特殊的是,自己可以管辖自己。这个的好处是,修改起来比较方便,因为ancestor的信息没有写死。缺点是一个ancestor的所有孩子未必在同一个地方,查询时会导致多余的IO。

  • 相关阅读:
    hadoop balance
    随笔
    ubuntu server 使用parted分区
    程序员内功续
    hadoop——hdfs多硬盘挂载
    hdfs老数据压缩备份的一些问题20120521
    hadoop balance failed
    hoj 2524 Allocate Dormitories 二分图的最大匹配
    HDOJ 分类(转)
    hoj 3008 Matryoshka Dolls Again 最大独立子集
  • 原文地址:https://www.cnblogs.com/alphablox/p/3405303.html
Copyright © 2011-2022 走看看