MySQL多个表或序列化数据


MySQL multiple tables or serialized data

我正在用PHP/MySQL为退役军人写一个招聘网站,我正处于一个不确定该朝哪个方向发展的阶段

我有一个包含所有常用名字、姓氏等和唯一candidate_id的"候选者"表,以及一个由唯一candidate _id 链接的地址表

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

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

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

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

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

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

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

最后,除非你有很多表,否则你不太可能因为一对一联接(这种数据很容易被反规范化)的数量而遇到性能问题。

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

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

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

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