3

我的软件(用 PHP 编写)允许用户使用 HTML 表单为他们的“简历”输入信息。这个“简历”有几个不同的元素,包括用户的教育、工作经历、奖项、求职信等。每个元素在它包含的数据中都是独一无二的。例如,教育需要诸如毕业年份、学校名称、学位等字段。

我的问题是,将简历数据存储在 mySQL 数据库中的最佳方法是什么?我目前的选择是:

  • 为每个简历元素创建单独的表(resume_education、resume_awards 等)
  • 对简历的所有元素使用一张表,并以多维数组的形式插入元素数据。(即:一个表包含包含教育、工作历史、等等等列的简历数据。教育或类似领域的数据将被编译成一个数组,例如 ("grad_year"=>"1990", "school_name"=>" Cool School”)或类似的东西,其中使用指示字符表示新字段)。

第一种选择提供了易于维护和编码,而第二种选择似乎可以显着减少备份和加载时间以及数据库维护。也许有更好的方法?你会推荐什么 ?

4

3 回答 3

1

选项 2 显然是错误的。如果您不打算将数据分解为行和列,并且至少遵循数据规范化的前几条规则,那么就没有理由使用关系数据库(您可以在文件系统文件夹中使用 XML 文档)。

选项 1 可能是最正确的。如果期望所有元素都出现在所有简历中,并且简历中没有元素重复,那么您实际上可以为整个简历创建一个表格,每个字段都在其自己的列中。由于我不认为满足这些条件(例如,工作经历和教育应该是可重复的元素),因此每个元素单独的表格是正确的选择。

于 2013-01-08T04:36:44.360 回答
1

我会选择多个表,但没有命名表更通用。

例如。表

resume_section
id,name
1,personal details
2,education
3,work history

resume_section_attributes
id,resume_section_id,name
1,1,name
2,1,phone
3,1,email
4,2,school_name
5,2,grad_year
6,3,company_name
7,3,number_of_years

user_resume
id,user_id,resume_section_attribute_id,value
1,99,1,My Name
2,99,2,12345678

Now when you want to build a users resume you can go straight to the user resume table and get all their details and join with the attributes table for the attribute names etc. You could change the order of attrs for display, easily add new ones. Set them as required or not. Set limits for the number of phone numbers or something. The possibilities for extending are endless.

于 2013-01-08T04:38:03.640 回答
0

绝对选择选项 1。良好的数据库设计至关重要,良好的数据库设计涉及规范化您的数据,这只有在您使用自己的表对不同实体建模时才有可能。

看看这篇关于数据库规范化的文章,它对所涉及的概念进行了很好的讨论。

于 2013-01-08T04:31:42.123 回答