我最近接手了一个网站,人们可以通过网站注册帮助孩子。用户的部分细节是他们可以使用哪些区域,以邮政编码表示。问题是,我的前任设计了网站,以便在数据库中为每个邮政编码都有一个布尔列。因此,用户表有近270列,有时可能很慢(加上管理的噩梦)。
大多数用户只选择几个邮政编码,因此肯定有更好的方法。我正在考虑一个可以保存所选区域逗号分隔的varchar,例如6043,8811,1234
有人提出同样问题的建议吗?
答案 0 :(得分:3)
你的前任和你的解决方案都是......很奇怪。
您应该只在用户和地点之间建立一个关系表(假设您有一个地点表,一个postalCode字段和一个代理键(id))。
UserLocality(userId int, localityId int)
所以一个地方可能有很多用户,一个用户可能有很多地方。
当查询时间到来时,彗星分离字段是一个非常糟糕的主意。
答案 1 :(得分:0)
你应该抛弃整个想法,并研究正确的标准化数据。
这个问题的一个可能的解决方案是教师的表,它有一个id列来唯一地标识一个导师。
然后你会有一个只有邮政编码的表(每个都有唯一的ID),最后是一个tutor_availability表,为教师希望提供服务的每个邮政编码创建一个(t_id,pc_id)记录,同样一个唯一的ID,以避免重复风险,如果他们可以选择相同的位置两次。