CRM表结构
tbl_user 用户表
tbl_dic_type 数据字典类型
tbl_dic_value 数据字典值
tbl_activity 市场活动表
tbl_activity_remark 市场活动备注表
tbl_clue 线索表
tbl_clue_remark 线索备注表
tbl_customerr 客户表
tbl_customer_remark 客户备注表
tbl_contacts 联系人表
tbl_contacts_remark 联系人备注表
tbl_tran 交易表
tbl_tran_remark 交易备注表
tbl_tran_history 交易历史表
tbl_task 任务表
1.主键字段:
定义:
在一个数据库表中,如果有一组字段能够唯一确定一条记录,则可以把他们设计成表的主键,推荐使用一个字段做主键,而且推荐没有业务含义的字段做主键,比如id
主键的类型和长度
主键字段类型和长度由主键值的生成方式来决定:
主键值的生成方式:
1.自增:借助数据库自身主键生成机制—>数值型 长度由数据量来决定,效率低,关于效率低的解释:
2.assighed:由程序员手动生成主键值,唯一非空,算法 hi/low:数值型 长度由数据量决定,UUID:字符串 长度是32位 效率高,不存在加锁的情况
3.共享主键:由父表的类型长度决定,不推荐,两表耦合太高
tbl_person tbl_card
id name id name
1 za 1 car
4.联合主键:有多个字段的类型和长度决定,不推荐
2.外键字段:确定表和表之间的关系
一对多:A —> many B ,A叫父表 B叫子表
在多的一端加外键
操作方式
添加数据时,先添加父表数据,在添加子表数据
删除数据时,先删除子表记录,在删除父表记录
连接定义
内连接:
查询所有符合条件的数据,并且要求结果在两张表中都有相对应的数据
左外连接:
查询左侧表中所有符合条件的数据,即使在右侧表中没有相对应的数据
右外连接:
查询右侧表中所有符合条件的数据,即使在左侧表中没有相对应的数据
连接方式选择:
看外键是否为空,
1.如果外键不可以为空,用内连接,
2.如果外键可以为空,看情况
2-1.假如只需要查询那些在另一张表中有相对应的记录,使用内连接
2-2.假如需要查询左侧表中所有符合条件的记录,使用左外连接
3.三种表关系的实现
一对一关系
一对一:A –> B
一对一关系实现方式:
1.共享主键:不推荐,两张表的耦合度太高
2.唯一外键:唯一外键添加在后产生的记录上
tbl_person tbl_card
id name id name person_id
1001 zs 111 car 1001
注意:语法上来将,第二张表的外键是可以重复的,可一旦重复了,两张表的关系变成了 一对多 的关系,为了避免 后产生的记录 的外键重复,应当在后产生的表的外键字段上加上唯一性约束,一对一就是一种特殊的一对多关系
多对多关系
操作方式:
添加数据时,先添加父表记录(tbl_student,tbl_course)在添加子表记录
删除数据时,先删除子表记录(tbl_student_course_relationship)
关系图示:
多对多
tbl_student tbl_course
id name id name
1001 zs 111 java
1002 ls 112 mysql
tbl_student_course_relationship
student_id course_id
1001 111
1001 112
1002 111
1002 112
多对多关系的本质:
通过中间表把两张表的多对多关系转化成了两个一对多关系
查询多对多数据方式
查询数据时,可能会进行关联查询
查询所有姓张的学生的id、name、coursename
select s.id ,s.name,c.name as coursename
from tbl_student s join tbl student_course_relationship scr on s.id = scr.student_id
join tbl_course c on scr.course_id = c.id
where s.name like ‘z’
4.关于日期和时间的字段
Date –>java
date –>mysql
time –>mysql
datetime –>mysql
要相互转化,麻烦
都统一按照字符串处理
char(10) yyyy-MM-dd
char(19) yyyy-MM-dd HH:mm:ss
这样就不用考虑转换了
原创文章,作者:254126420,如若转载,请注明出处:https://blog.ytso.com/271287.html