CRM项目 day01 物理模型设计+项目结构

文章介绍了CRM系统的技术架构,包括视图层、控制器、业务层、持久层和整合层(Spring框架)。核心业务涉及系统管理、用户登录、市场活动、销售线索、交易和售后回访等功能。此外,讨论了数据库设计,如主键、外键和表间关系,以及内连接和外连接的使用场景。最后,提到了项目结构和开发流程。
摘要由CSDN通过智能技术生成

CRM技术架构

视图层:view
展示数据,与用户交互
html,css,js,jquery,ajax,jsp,bootstrap
控制层:controller
接收参数,封装参数,接收请求,根据请求调用业务层的方法处理业务,根据处理结果,返回响应数据。
业务层:Service
处理业务逻辑,以及操作的原子性。
持久层:Dao,Mapper
操作数据库
整合层:spring(IOC,AOP)
维护类资源,维护数据库资源

CRM核心业务

CRM项目的核心业务:
系统管理功能:不是直接处理业务数据,为了保证业务管理的功能正常安全运行而设计的功能。
用户登录,安全退出,登录验证等
给超级管理员,开发和运维人员使用。
业务管理功能:处理业务数据
市场活动:市场部,设计市场活动营销活动
线索:销售部(初级销售),增加线索
客户和联系人:销售部(高级销售),有效地区分和跟踪客户和联系人.
交易:销售部(高级销售),更好地区分和统计交易的各个阶段。
售后回访:客服部,妥善安排售后回访。主动提醒。
统计图表:管理层,统计交易表中各个阶段数据量。

分析与设计: 物理模型设计

表结构:

1)主键字段:能够唯一标识一条记录的一组字段。
主键的选择需要具备唯一性,不可为空,稳定性。
稳定性是指主键的值应该是稳定不变的,不会随着时间或者环境的变化而发生改变。
因此我们选择的主键一般是与业务逻含义无关的字段。
2)外键字段:用来确定表与表的关系
表与表的关系:

一对多

一个班级可以有多个学生,而一个学生只属于一个班级
主表:班级 子表:学生

tbl_student  (子表)                              tbl_class(主表)
		id      name class_id          id     name
		1001    zs    111              111    class1
		1002    ls    111              222    class2
		1003    ww    222
		1004    zl    

在子表中添加主表的主键作为子表的外键。

添加数据时,先添加父表记录,再添加子表记录;
删除数据时,先删除子表记录,再删除父表记录;
查询数据时,可能会进行关联查询:

注意在查询的时候主从表不是固定的,并不是根据表的关系决定的,而是根据具体情况灵活决定,以便达到更好的查询效果

//查询所有姓张的学生的id,name和所在班级name
select s.id,s.name,c.name as className
from tbl_student s
join tbl_class c on s.class_id=c.id//假如外键不可以为空
where s.name like ‘z%’
在这里,student表是主表,班级表是从表,与表的关系无关。

一对一

一张表(A)中的一条记录只能对应另一张表(B)中的一条记录;

多对多

一张表(A)中的一条记录可以对应另一张表(B)中的多条记录;
另一张表(B)中的一条记录也可以对应一张表(A)中的多条记录。
一堂课可以被多个学生选,一个学生可以选多个课。

				 tbl_student                    tbl_course
		       id     name                    id     name   
		       1001   zs                      111    java   
		       1002   ls                      222    mysql  
		       tbl_student_course_relation
			    student_id     course_id
				1001            111
				1001            222
				1002            111
				1002            222

多对多表的关系,需要一张额外的关系表。

内连接和外连接

选择使用内连接还是外连接,以及左外连接和右外连接,取决于具体的需求和查询的表之间的关系。以下是一些常见的情况和建议:

  1. 内连接:查询所有符合条件的数据,并且要求结果在两张表中都有相对应的记录
  2. 左外连接:查询左侧表中所有符合条件的数据,即使在右侧表中没有相对应的记录。比如查询学生表中的所有学生和选课表中已选课的学生,包括未选课的学生信息。
  3. 右外连接:查询右侧表中所有符合条件的数据,即使在左侧表中没有相对应的记录。比如查询选课表中的所有选课记录和学生表中已选课的学生信息,包括未选课的学生信息。
  4. 全外连接:当需要查询两个表中所有数据时使用全外连接。但需要注意的是,某些数据库不支持全外连接,需要通过联合查询实现。
  5. 总的来说,使用内连接可以提高查询效率,而使用外连接则可以保留所有的数据,包括未匹配的数据。当需要查询的数据涉及到“缺失数据”时,可以考虑使用外连接。但是需要注意,使用外连接时可能会产生大量的冗余数据,需要在开发中谨慎使用,并且需要通过一些手段进行数据去重和整理。

如果外键不能为空,优先使用内连接;
如果外键可以为空,
–假如只需要查询那些在另一张表中有相对应的记录,使用内连接
–假如需要查询左侧表中所有符合条件的记录,使用左外连接.
因为内连接只返回两个表中都满足连接条件的数据,不存在不匹配的情况。同时,如果外键约束不允许为空,也说明这个外键是非常重要的,并且一定与某个主键或唯一键相关联。这时,内连接性能更高,同时可以排除没有关联数据的无效数据,更精准地满足查询需要。

有关日期和时间

给关于日期和时间的字段:
都按照字符串处理:
char(10) yyyy-MM-dd
char(19) yyyy-MM-dd HH:mm:ss
怎么限定客户写入的日期是按格式的?使用bootstrap框架的时间选择器,不许他们输入,这样我们存入数据库的数据格式就一致了。

项目结构

src
	main
		java
			com.wll.crm
					commons 公共类,方法,常量
					workbench 工作区的Service,Controller,Mapper,doMain
					settings 系统管理区的Service,Controller,Mapper,doMain
					web 输入网址从首页进入登录页面
		resources
				applicationContext    spring配置
				applicationContextDispatcher   springmvc配置
				applicationContext-database     mybatis配置
				mybatis-config.xml   包名,类名起别名
				jdbc.properties   连接数据库
				mapper的xml文件 写sql语句
		webapps
		     |->.css,.js,.img   (图片等静态资源不需要被保护,因为黑客无法通过图片对我们的数据进行破坏)
		     |->WEB-INF
		          |->受保护的jsp   
				  |->web.xml
				  |->classes
				  |->lib
			  |->pages  test.jsp,index.jsp
pom.xml

最后idea会把编译后的/main/java|resources目录下的class文件都放到WEB-INF/classes目录下
把pom.xml中的依赖中的jar包都会放到WEB-INF/lib目录中
jsp文件经过服务器最终解析是.html文件。

先做什么功能?
先做系统功能,系统功能是用于维护的,业务功能需要用到系统功能所产生的数据,没有系统功能,无法做业务功能。
系统功能如首页,登录退出等。先做被依赖的功能,必须先登录才能进入主页,因此先做登录页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值