一个很难的数据迁移问题

Henry956595421 2014-05-03 12:29:25
某系统根据用户购买数据已经生成了同时购买同一类别下两个产品的数据,现需要使用该数据,生成同时购买同一类别下三个产品的数据,请设计并简要实现:
说明:
1、表结构如下:
create table purchasetogether (
ProductId1 varchar(50) not null,
ProductId2 varchar(50) not null,
CategoryId int(10) not null,
CustomerCount int(10) not null,
CustomerIds text not null,
primary key (ProductId1, ProductId2),
key CategoryId (CategoryId)
);
create table multipurchasetogether (
ProductId1 varchar(50) not null,
ProductId2 varchar(50) not null,
ProductId3 varchar(50) not null,
CategoryId int(10) not null,
CustomerCount int(10) not null,
CustomerIds text not null,
primary key (ProductId1, ProductId2, ProductId3),
key CategoryId (CategoryId)
);

1. ProductId1: 同时购买的第一个产品id,已有数据已经保证ProductId1 < ProductId2
ProductId2: 同时购买的第二个产品id
CategoryId: 产品类别id
CustomerCount: 同时购买ProductId1和ProductId2的用户数量
CustomerIds: 同时购买ProductId1和ProductId2的所有用户id列表,用户id间以逗号分隔
2、该表的数据量为千万或者上亿级,处理时需要按照每个产品类别(Category)进行,单个类别的数据量可能会达到百万级。设计和实现时可以只考虑处理配置的单个类别。
3、生成的数据放入multipurchasetogether表,表结构与purchasetogether类似,并且需要保证ProductId1<ProductId2<ProductId3。
4、
举个例子:
Product代表产品, u代表人。
按照题目描述,假定现在数据库已有数据如下:
product1,product2--食品--(u1,u2,u3)--3个
product1,product3--食品--u1—1个
product5,product6—食品—u1,u2,u3,u4)--4个

现在的话,就是要将:
product1,product2,product3—食品---u1
Product1product2,product5—食品---u1,u2,u3
Product1.product2,product6—食品---u1,u2,u3
Product2,product3,product6—食品---u1

。。。。
插入到表multipurchasetogether.

我想的是,他这个sql语句怎么写呢?他这个数据量这么大,插入到数据库的话,还要保证效率啊
或者用java代码的话,又怎么写呢?


请高手指点一下。。。。
为了方便测试,我已经在数据库建立了一些表,方便测试(mySql):
#delete tables;
drop table purchasetogether;
drop table purchase;
drop table user;
drop table product;
drop table justTest;

#create tables;
create table user(id varchar(20) primary key, name varchar(40),gender varchar(8) );
create table product(id varchar(20) primary key, name varchar(40), category varchar(20), price varchar(20));
create table purchase(id varchar(20) primary key, user_id varchar(20), product_id varchar(20),
foreign key(user_id) references user(id), foreign key(product_id) references product(id));
create table purchasetogether(productId1 varchar(20), productId2 varchar(20), categoryId varchar(20),
customerIds varchar(20), customerCount varchar(20), primary key(productId1, productId2),
foreign key(productId1) references product(id),foreign key(productId2) references product(id));
create table justTest(id varchar(20), name varchar(20));

#prepare values
#for user
insert into user values('u1', 'Ferdinand', 'Male');
insert into user values('u2', 'Jack', 'Male');
insert into user values('u3', 'Rose', 'Female');
insert into user values('u4', 'Alice', 'Female');

#for product
insert into product values('p1', 'computer', 'electric', '4000RMB');
insert into product values('p2', 'watch', 'electric', '1000RMB');
insert into product values('p3', 'Banana', 'fruit', '4RMB');
insert into product values('p4', 'football', 'sports', '100RMB');
insert into product values('p5', 'basketball', 'sports', '200RMB');

#for purchase
insert into purchase values('b1', 'u1', 'p1');
insert into purchase values('b2', 'u1', 'p2');
insert into purchase values('b3', 'u2', 'p1');
insert into purchase values('b4', 'u2', 'p2');
insert into purchase values('b5', 'u2', 'p3');
insert into purchase values('b6', 'u3', 'p1');
insert into purchase values('b7', 'u3', 'p2');
insert into purchase values('b8', 'u3', 'p3');
insert into purchase values('b9', 'u4', 'p4');

#for purchasetogether
insert into purchasetogether values('p1', 'p2', 'electric', 'u1,u2,u3', '3');
insert into purchasetogether values('p2', 'p3', 'no', 'u2,u3', '2');
insert into purchasetogether values('p1', 'p3', 'no', 'u2,u3', '2');

#for justTest
insert into justTest values('001', 'zs');
insert into justTest values('002', 'ls');

#description
#p1,p2--u1,u2,u3
#p2,p3--u2,u3
#p1,p3--u2,u3
#p1,p2,p3--u2,u3


...全文
121 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Henry956595421 2014-05-03
  • 打赏
  • 举报
回复
#description #p1,p2--u1,u2,u3 代表用户u1,u2,u3购买了产品p1,p2 #p2,p3--u2,u3 代表用户u2,u3购买了产品p2,p3 #p1,p3--u2,u3 现在就是要将上面的数据分析成:用户u2,u3购买了3个产品,分别是p1,p2,p3,并且插入到multipurchase数据库: #p1,p2,p3--u2,u3

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧