[数据库表的设计]请教下多个表间是多对多关系该如何设计

新手上路,请多包涵

我在的公司是广告代理公司,广告公司赚钱就是靠(从下游媒体这拿到的折扣>给上游客户的折扣)赚差价。
我现在想要设计个数据库满足自己统计业务的需要:

大致业务关系是这样的:
内部:
1) 一个客户 ID 会有一个销售(员工)ID 去跟进,但是会有转户的情况,就是说 19 年 A 君跟进的客户 20 年会由 B 君跟进。
2) 一个客户会通过多个供应商在多个媒体上开账号投放,同时一个媒体也会有多个账户在上面投放
3) 客户侧:媒体不同,行业不同,我司给予客户的折扣也不同
4) 媒体侧:和客户侧一样,客户不同,行业不同,媒体给予我司的折扣也不同
5) 需要统计每天每个投放账户的日消耗

想问下:
A. 1)的情况是不是也算多对多关系?除了建映射表有别的设计方法不?
B. 我现在主要的问题是不知道该把给客户的折扣和给媒体的折扣放在哪个表,是分别单独建一张客户折扣表和媒体折扣表还是说直接记录在日投放数据这张表里?
C. 如果是把折扣单独分开建表的话,像这种 分客户分行业分媒体的政策该怎么画关系图?
image1.png
这里我画了给上游客户的折扣,但是从下游媒体这拿到的折扣政策我不知道该怎么画了。
或者说是应该把客户侧的折扣和媒体侧的折扣都记录在映射表里?
image2.png

D. 由于从媒体侧拿到的折扣政策会随时间改变,所以需要记录历史折扣,我的想法是录入数据的时候匹配当时的政策写死,不知道有没有什么更好的方法?
E. 由于需要统计历史投放数据,所以像这种日消耗数据,大家一般是怎么记录的呢?是当成一条订单记录还是用时间和账户做联合主键记录呢?

阅读 2.7k
1 个回答

你这个内容较多,我就自己的理解简单说下。
A 不是多对多,这是多对一或是一对多。因为一个客户只能拥有一个员工跟进。可以简单的把跟进的员工写到客户表中。
B 建立分别建立 行业折扣表 媒体折扣表。记录名称以及对两侧的不同折扣。
C 单独建表后可以关联折扣表得出 客户折扣 行业折扣 媒体折扣 ,以应用到不同的计算场合。
D 记录时点值(在相关记录中写死)是个最简单有效的方法
E 每天记录一条即可。生成的订单用id做主键,切记不要用联合主键。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题