mssql sql server 常见的数据表设计-数据库面试


摘要:
下文主要讲述一个 面试数据库设计经历


现实中,一些实业公司常常有这样的业务场景:
一个公司分 销售客户、售后客户、售前客户、线上客户、活动客户、拓展客户等等来源不同的客户资料,
而且每种客户资料都具有一批不同的属性。

那么像这类业务我们该如何设计数据库呢?

方法1:
新增建一张表,将所有的客户涉及的属性,都放入此表中

将所有的 销售客户、售后客户、售前客户、线上客户、活动客户、拓展客户 都放入此表中

方法1 会导致有些属性字段占用数据空间,但是字段永远都不会存于数据
当有新的客户类型产生时,我们又需要为表增加相应的列,会导致表的空间无限的增大
但是方法1的优点就是 报表查询时,比较方便。


方法2:
新建一张 销售客户表
新建一张 售后客户表
新建一张 售前客户表
新建一张 线上客户表
新建一张 活动客户表
新建一张 拓展客户表
新建一张 …
针对每个客户新建一张表
方法2 :数据存储上不会出现过多的冗余,但是当我们需要统计数据时,就会出现相应的麻烦,需要遍历多张表,
当我们需要为客户建立一个公共属性时,并希望从数据库的角度限制此属性的唯一性,此时我们采用多张表存储数据,就会无法从数据库设计的角度处理此问题。



方法3:
新建一张 客户表:包含客户的公共属性
新建一张 销售客户属性表
新建一张 售后客户属性表
新建一张 售前客户属性表
新建一张 线上客户属性表
新建一张 活动客户属性表
新建一张 拓展客户属性表
当每出现一类新的客户时,我们只需要新增一张对应的客户属性表,来满足相应的需求


方法3表结构设计的优点:
数据冗余减少
也不会对数据报表提取增加难度
方便后续扩展