数据库表中的许多Bool列

时间:2014-08-14 15:48:41

标签: mysql performance boolean

我最近接手了一个网站,人们可以通过网站注册帮助孩子。用户的部分细节是他们可以使用哪些区域,以邮政编码表示。问题是,我的前任设计了网站,以便在数据库中为每个邮政编码都有一个布尔列。因此,用户表有近270列,有时可能很慢(加上管理的噩梦)。

大多数用户只选择几个邮政编码,因此肯定有更好的方法。我正在考虑一个可以保存所选区域逗号分隔的varchar,例如6043,8811,1234

有人提出同样问题的建议吗?

2 个答案:

答案 0 :(得分:3)

你的前任和你的解决方案都是......很奇怪。

您应该只在用户和地点之间建立一个关系表(假设您有一个地点表,一个postalCode字段和一个代理键(id))。

UserLocality(userId int, localityId int)

所以一个地方可能有很多用户,一个用户可能有很多地方。

当查询时间到来时,彗星分离字段是一个非常糟糕的主意。

答案 1 :(得分:0)

你应该抛弃整个想法,并研究正确的标准化数据。

这个问题的一个可能的解决方案是教师的表,它有一个id列来唯一地标识一个导师。

然后你会有一个只有邮政编码的表(每个都有唯一的ID),最后是一个tutor_availability表,为教师希望提供服务的每个邮政编码创建一个(t_id,pc_id)记录,同样一个唯一的ID,以避免重复风险,如果他们可以选择相同的位置两次。