表结构与数组

时间:2016-01-20 05:37:49

标签: mysql

设计可以解决以下问题的表结构的最有效方法是什么。我的数据以逗号分隔的文本文件形式出现:

ID,Name,Married_To,Lived_In,Works_For,DOB
1325,Joe,Ana; Mary; Elen; Ana,Budapest; Paris; Budapest,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; NewYork; Bujumbura,Netflix,1975-01-15

ID不是唯一的,但我可以根据字段组合创建唯一的主键。 这两个乔是截然不同的,但只有一个Ana喜欢乔(她嫁给了第一个Joe,然后是年轻的Joe,并且在晚年她再婚了她的初恋Joe) 我需要以这样的方式读取mysql表中的数据,以便我可以高效地运行如下的查询:

" Ana结婚了多少次"
"有多少人从伦敦搬到布加勒斯特"
"有多少人住在伦敦和布加勒斯特"

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

1 个答案:

答案 0 :(得分: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'