举个例子,一个物料基本档中,包含很多栏位,其中有些栏位
只能由生管编辑,有些由工程编辑,对于这种情形,是设计成一个表好,
还是多个表。MS SQL2000的帮助上说多个窄表好。我分析起来各有优缺点如下:
1、使用多个表的话,那么如果要抓两个表的资料时,势必使用交叉查询,这肯定
没有单个表速度快。
2、在编辑时,使用单个表引起的锁定比多个表要多。
3、如果要进行表一级的访问权限控制的话,使用多个表肯定比单个表要好。不过,
表一级的访问权限控制这个功能我在实际中没有使用,我们公司的ERP也没有使用这
一点,这个功能用得到的公司应该不多。希望大家指点一下,谈谈自己的做法。

解决方案 »

  1.   

    先尽量建窄表,以获得最小的数据冗余,同时对数据间的逻辑关系也理得比较清楚,
    然后再根据查询的需要增加一些必要的冗余字段,以提高查询的效率。从数据在磁盘上的分布来看,也应该是小表效率高。字段少,那么一个页上可以放更多的记录。
    如果是大表的话,就算不用select *,那实际上也要读很多页面才能获得需要的字段。2、在编辑时,使用单个表引起的锁定比多个表要多。
    -------------------------------------------------
    这个倒不一定,数据库总是尽量使用记录级的锁,在多个表上放记录级锁并不会降低并发性。
      

  2.   

    lou shang da jia shuo de dou hen you dao li.
    yi ban lai shuo yao zun xun di san fan shi de yao qiu.
    guan jian yao kan ni de shu ju ku shi ji yu shen me xu qiu,ji yu cha xun fen xi(OLAP),hai shi ji yu cao zuo(OLTP).
      

  3.   

    在关系型数据库中 理论上既可以把相关联的记录组合成一张超大表 也可以把记录拆成为最简单最独立的极小表在实际搭建数据库表结构时 应该考虑对象的逻辑属性、访问集中性、并发控制等方面分开的好处是逻辑关系更鲜明 由于SQL没有列级锁 垂直分表有助于降低因施加行级锁导致的并发 如一行数据需要被三个用户同时独占X访问 如三个用户各司其职 固定只X访问表中字段M、字段N和字段X 不分表情况下另外两个用户blocking等待锁 如果分表合理 将三字段分开 则三个用户可以并发X访问;但过散无疑会增加表维护成本,增加查询时JOIN成本集中的好处是省去join操作的内存处理成本 特别是本身逻辑紧凑的列数据被强制分开 大量查询中均需要反复join 在表容量逐渐增大的过程中导致效率降低明显,对一些查询中用到的基础表推荐使用;同样,过度集中可能会造成潜在的并发问题,并造成存储空间浪费(重复数据明显)  
      

  4.   

    OLAP 考虑大表优先级高
    OLTP 考虑小表优先级高
      

  5.   

    Haiwer(海阔天空):
    “一般情况,应该保持设计的对象与客观存在保持一致。” 
    反对因为其他(非客观原因)原因认为拆分 
    ----------------------
    非常同意!如果维护与使用起来不方便,又何尝不是另一种低效率.