多对多的关系

vad*_*han 5 database-design data-modeling

我有一个客户和经理,两个独立的表.我的客户表有近一亿条记录,而经理表有100条记录.现在,我可以将客户映射到经理.规则如下

  1. 一位经理可以拥有多个客户.
  2. 一个客户可以与多个经理进行映射.

什么是最好的DB设计来解决这个问题?创建有效的ManagerCustomerMapping是一个想法.但我对它并不满意.因为这导致我一张很大的桌子.例如.如果Manager1和Manager2映射到所有客户,则此表具有2亿条记录.

pax*_*blo 10

尽管您有疑虑,但最好的数据库设计正是您所描述的.换句话说,有一个映射表ManagerCustomerMapping.

始终以3NF开始并修改当且仅当存在无法以其他方式解决的实际性能问题时.

如果您的业务规模与其看起来一样大(拥有1亿客户),则磁盘存储应该不是问题,并且映射表的正确索引应该可以缓解任何性能问题.

是的,如果每个客户都映射到两个不同的经理,那么您将拥有2亿条记录.那不是问题.在我工作的那种商店(DB2 on System z)上,这是关于一个中型表.

SQL的优点在于,如果DBMS性能不佳,您可以大部分更换DBMS.

两列ID列的两亿行对于普通数据库来说并不繁琐,这是最好的方法,特别是如果可能没有将客户分配给经理(反之亦然).尝试将客户ID放入经理表(或经理ID到客户表)中的任何其他解决方案都会浪费空间.