2016-01-20 65 views
0

设计可以解决以下问题的表结构的最有效方法是什么?我的数据都是逗号分隔的文本文件:
带有数组的表结构

ID,姓名,Married_To,Lived_In,Works_For,DOB
1325,乔,安娜;玛丽;埃伦;安娜,布达佩斯,巴黎,布达佩斯,IBM,1965- 01-15
2313 Mark,Elise,Bucharest; London; Bucharest; London,Microsoft,1972-01-17
3009,Joe,Ana; Cindy; Shaquiya,London; NewYork; Bujumbura; NewYork; Bucharest; Bujumbura;纽约;布隆迪,Netflix,1975-01-15

ID不是唯一的,但我可以创建一个基于字段组合的唯一主键。 这两个乔是不同的,但只有一个安娜喜欢乔(她嫁给了第一个乔,然后是年轻的乔,并在晚年她改嫁了她的初恋乔) 我需要读取一个MySQL表中的数据在这样我可以高效地运行之类的查询方式:

“多少次安娜结婚”

“有多少人从伦敦飞往布加勒斯特的感动”“多少人住在伦敦和布加勒斯特”

真实数据有点不同,每天包含大约700K条记录,Lived_in数组最多为400个元素。 MongoDB(或类似)可能更合适,但我必须使用mysql。

回答

0

你需要更快SQL一对多关系设计:

persons (id, name, company, dob) 
marriages (id, person_id, married_to, date_from) 
addresses (id, person_id, city, sequence_id) 

,这里是为您的报告的SQL:

select count(*) from marriages where married_to='Ana'; 

select count(*) from addresses a,addresses b 
where a.person_id=b.person_id 
and a.city='London' and b.city='Bucharest' 
and a.sequence_id + 1 = b.sequence_id 

select count(*) from addresses a,addresses b 
where a.person_id=b.person_id 
and a.city='London' and b.city='Bucharest' 
+0

没有“date_from”中的数据,查询有考虑顺序,即伦敦;布加勒斯特从伦敦搬到布加勒斯特但伦敦;纽约;;;;布加勒斯特没有 –

+0

然后假设addresses.id,更大的更新,然后用这个来代替:和a.id SIDU

+0

在这种情况下,我有更新设计和SQL – SIDU