【问题标题】:MySQL multiple tables or serialized dataMySQL多表或序列化数据
【发布时间】:2014-02-05 06:33:35
【问题描述】:

我正在为 PHP/MySQL 的前军事人员编写一个招聘网站,我正处于不确定该采取哪个方向的阶段

我有一个“候选人”表,其中包含所有常用的名字、姓氏等和唯一的候选人 ID,以及由唯一候选人 ID 链接的地址表

客户要求获取更多数据,如驾驶执照类型、宗教、SIA 级别(安全行业权威)、语言等

我的问题是,对于所有这些不同的数据,是否值得为每个数据设置专用表?例如,有一个驾驶执照表,其中包含所有不同类型的驾驶执照,每个都有一个唯一的 id,然后用一个driving_licence_id 单元格链接到候选表?

还是应该将所有额外的数据序列化为文本并将其放在候选表的一个单元格中?

【问题讨论】:

  • 如果您愿意为修改这些数据而头疼 - 继续并序列化它(我的个人经验)。目前我可以想象只有一个有效的用例——这些数据将主要由 javascript 使用,所以你只需序列化为 JSON 就可以了。
  • “不会用于查询”,我的脚。

标签: php mysql database-design


【解决方案1】:

我的问题是,对于所有这些不同的数据,是否值得为每个数据设置专用表?

是的。 这就是数据库的用途。

【讨论】:

  • 会不会因为需要所有连接而降低性能?
  • 性能和这个问题完全没有关系。这绝对是无关紧要的事情。
【解决方案2】:

专用表与序列化数据分别称为数据库规范化和非规范化。在某些情况下,这两种选择都可以接受,但您确实应该通过阅读相关主题(例如 here on about.com)做出明智的选择。

就我个人而言,我通常更喜欢使用规范化数据库,因为它们更容易查询复杂的聚合数据。此外,我觉得它们也更容易维护,因为在添加新字段和表时通常不需要重构。

最后,除非您有很多表,否则由于一对一连接的数量(这种数据很容易反规范化),您不太可能遇到性能问题。

【讨论】:

  • 额外的数据不会用于查询,所以我认为序列化是前进的方向。谢谢!
  • 大容量存储与非规范化没有共同点
  • @Andy 这个假设(不会用于查询)将是一个严重的错误。需要查询的数据。这是招聘网站,伙计。雇主可能(并且将)希望看到具有某些能力的候选人,例如某些 SIA 级别等。
  • 就像我在回答中所说的那样,我更喜欢规范化数据库,它们只是更具前瞻性,除了非常大规模的示例之外,性能通常不会成为问题。
【解决方案3】:

这取决于您是否希望查询此数据。如果是这样,请保持数据规范化(例如,在它自己的逻辑分隔表中),否则,如果它只是要拉动的元数据,那么最简单的似乎都是合理的。

这两种方法都不一定会在将来排除另一种方法,可以创建简单的迁移脚本来将数据从一种格式移动到另一种格式。我建议您做最简单的事情,以使您能够尽快使用网站的其他功能。

【讨论】:

    【解决方案4】:

    相信我,你必须始终追求标准化。 我犯了一个错误,即通过简单的方法并不正确地存储数据(不仅是序列化、内爆的多维数组字符串),然后到时候我不得不重新设计整个东西,这浪费了很多时间。

    我再也不会走错路了,客户今天可以说“不”,明天可以“报告(查询)”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 2012-06-05
      相关资源
      最近更新 更多