2016-01-20 62 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