日期:2014-05-17  浏览次数:20692 次

客户管理系统的完善
各位大虾,我这里有这样一个需求:客户管理系统,有销售和技术这2个职位,销售A登录系统的时候,系统会在数据库自动查询出跟他相关的客户和负责这个客户的技术,销售B登录系统时,查询的跟销售B有关的信息;当技术登录系统时,系统会自动查询出他负责的客户信息,我现在设计了2张表,如下:
create table tb_user{
nid int(4) primary key AUTO_INCREMENT,#主键 用户ID
vusername varchar(20) not null, #用户名
vpwd varchar(30) not null, #用户密码
vname varchar(30) not null, #员工名
vpurview int(4) not null, #用户权限
vpostion varchar(20) not null #职务
}ENGINE=INNODB;
create table tb_customers{
nid int(4) primary key AUTO_INCREMENT,#主键 客户ID 
vcstname varchar(50) not null, #客户名
vdemand varchar(200) not null, #客户需求
vaddress varchar(50) not null, #客户地址
vofficephone varchar(15), #办公电话
vmobilephone varchar(15), #移动电话
voicq varchar(20), #QQ号码
vindustry varchar(30) not null, #客户的产业方向
vuser_id int(4) REFERENCES tb_user(nid)#所属用户
}ENGINE=INNODB;
这里是进行了一个查询语句:
select * from tb_customers where vuser_id = (select nid from tb_user where vpurview = (SELECT vpurview from tb_user where vusername = 'user'))

但是这样的话有个问题,假如是销售A登录到系统后,查询出来的没有相关联的技术,各位大虾帮忙解决一下,数据库改如何设计?

------解决方案--------------------
首先,你要弄清楚是否每个客户只有一个销售和一个技术?如果是,改成下面的:
create table tb_customers{
nid int(4) primary key AUTO_INCREMENT,#主键 客户ID
vcstname varchar(50) not null, #客户名
vdemand varchar(200) not null, #客户需求
vaddress varchar(50) not null, #客户地址
vofficephone varchar(15), #办公电话
vmobilephone varchar(15), #移动电话
voicq varchar(20), #QQ号码
vindustry varchar(30) not null, #客户的产业方向
vuser_id1 int(4) REFERENCES tb_user(nid),#所属销售
vuser_id2 int(4) REFERENCES tb_user(nid)#所属技术
}ENGINE=INNODB;

关键是:
vuser_id1 int(4) REFERENCES tb_user(nid),#所属销售
vuser_id2 int(4) REFERENCES tb_user(nid)#所属技术

如果客户和销售、技术的关系不是一对一,那可以把关系对应放到一个表里,
create table rlship(
nid int(4), 
vuser_id int(4)
);