我想用以下字段设计地址簿
UID名称PhoneNumber1 PhoneNumber2
UID是唯一标识名称。让我们说我想节省200万条记录。 现在我想构建如何保存这些记录,以便可以通过Name和phoneNumber进行搜索。
我应该使用哪种数据结构和搜索技术。
提前致谢
答案 0 :(得分:1)
如果您的姓名有冲突怎么办? 约翰史密斯可以多次返回。 您最好只使用PhoneNumber1 / PhoneNumber2作为搜索变量。
我建议HashTable执行此操作,因为它允许O(1)进行搜索,并且有200万条记录,您不希望它永远找到某人。
答案 1 :(得分:1)
将其标准化为以下表格和列:
UID, Name
UID, SN, PhoneNumber
您执行的每次搜索都应运行两个查询,每个表一个(或两个表上的一个UNION查询)
SELECT UID, Name
FROM Names
WHERE Name = '%<search string>%'
SELECT UID, PhoneNumber
FROM PhoneNumbers
WHERE PhoneNumber = '%<search string>%'
ORDER BY UID # so that multiple matches with same user appear together
结合两个查询的结果可以用Java完成。
答案 2 :(得分:1)
为什么不设计课程AddressBook
class AddressBook{
private Integer uuid;
private String name;
private Integer phoneNumber1;
private Integer phoneNumber2;
//getters & setters
}
使用相应的字段在数据库中创建AddressBook表。 uuid
将成为主键。保留AddressBook对象。
按名称搜寻
select * from AddressBook where name ="something";
按电话号码搜寻
select * from AddressBook where phoneNumber1="something";