【问题标题】:Many Bool columns in database table数据库表中的许多 Bool 列
【发布时间】:2014-10-08 08:31:52
【问题描述】:

我最近接管了一个网站,人们可以在该网站上注册以帮助辅导孩子。用户的部分详细信息是他们可以工作的区域,用邮政编码表示。问题是,我的前任设计了这个网站,在数据库中每个邮政编码都有一个布尔列。因此,用户表有近 270 列,有时可能会很慢(而且管理起来简直就是一场噩梦)。

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

遇到同样问题的人有什么建议吗?

【问题讨论】:

  • 字段中的逗号分隔列表几乎总是一个坏主意。考虑为用户、邮政编码和工作能力的每个组合使用另一张单行表。此类问题很常见。
  • 抱歉延迟回复,看来这家公司可能要关门了,所以我没怎么待过。我考虑了一个用户表和一个“用户的邮政编码”表,但认为字符串会更简单,它只有大约 100 个用户。我会听取大家的建议。感谢您的信息。

标签: mysql performance boolean


【解决方案1】:

您应该将整个想法抛诸脑后,并研究正确规范化的数据。

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

然后您将有一个仅包含邮政编码的表(每个都有唯一的 id),最后是一个tutor_availability 表,该表为导师希望提供服务的每个邮政编码创建一个 (t_id, pc_id) 记录,再次使用一个唯一的 id,以避免在他们可以选择同一位置两次的情况下出现重复风险。

【讨论】:

  • 减 1 - 这几乎是 Raphael 4 分钟前提交的答案的重复。您唯一添加的是在多对多表中添加第三列的坏主意。
  • 我在通知之前写了我的,以显示他的出现。冷静点。
【解决方案2】:

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

您应该简单地在用户和地区之间建立一个关系表(假设您有一个地区表,其中包含一个邮政编码字段和一个代理键 (id))。

UserLocality(userId int, localityId int)

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

当查询时间到来时,逗号分隔字段是一个非常糟糕的主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多