有代理商表,代理商下面有用户组,它们是1:n关系,用户组下面又有职员,也是1:n的关系,职员可以下订单。
要求可以查找一个代理商的所有订单,同时也可以查到一个单子是哪个代理的哪个职员下的,在建表时遇到了麻烦将职员与订单1:n的关系对应,这样在显示代理商的所有订单列表时会涉及到很多个join操作,感觉效率应该比较低,特别是订单和职员数量比较多时更严重;如果将代理商与订单直接1:n关联,再将下单职员的id存入订单中,这样效率要高些,但是有数据冗余,不太符合三范式要求,该怎么办?

解决方案 »

  1.   

    一对N的查询就不要那么死板了
    直接JOIN就可以了 效率不会低的
      

  2.   

    订单表中本来就应该有职员的id, 你的第二种方法只是冗余了代理商id,这样你就能跳过join代理商,用户组和用户找到代理商所有订单。个人认为这种冗余是可以的。关键看你的业务逻辑对这种查询的频率。 范式是为了防止数据冗余带来的潜在数据库异常数据,譬如你删除了某代理商,可有关订单中还有该代理商id。 你可以抛开范式,自己定义触发器,一旦代理商删除,自动删除订单中代理商id.不要拘泥范式,关键看业务需求。