MySQL多表或序列化数据

时间:2012-01-17 13:02:44

标签: php mysql database-design

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

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

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

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

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

4 个答案:

答案 0 :(得分:5)

  

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

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

答案 1 :(得分:4)

这取决于您是否要查询此数据。如果是这样,请保持数据标准化(例如,在它自己的逻辑分离表中),否则,如果它只是为了乘坐而拉动的元数据,那么最简单的似乎是合理的。

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

答案 2 :(得分:3)

专用表与序列化数据分别称为数据库规范化和非规范化。在某些情况下,这两个选项都是可以接受的,但你应该通过阅读这个主题来做出有根据的选择(例如here on about.com)。

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

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

答案 3 :(得分:2)

相信我,你必须始终保持正常化。 我错误地通过简单的方式并且不正确地存储数据(不仅是序列化的,内部的多维数组的字符串),然后当时间到来我必须重新设计整个事情并且浪费了很多时间。

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