最佳数据库存储方法

时间:2013-01-08 04:21:41

标签: php mysql database normalization organization

我的软件(用PHP编写)允许用户使用HTML表单输入“简历”的信息。这个“简历”有几个不同的元素,包括用户的教育,工作历史,奖励,求职信等。每个元素在其包含的数据中是唯一的。例如,教育需要毕业年份,学校名称,学位等领域。

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我会选择多个表,但不是更通用的命名表。

EG。表

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

现在,当您想要构建用户简历时,您可以直接访问用户简历表并获取所有详细信息,并使用属性名称等属性表进行加入。您可以更改attrs的顺序以便显示,轻松添加新的。根据需要设置它们。设置电话号码或其他数量的限制。扩展的可能性是无穷无尽的。

答案 2 :(得分:0)

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

看看this article on database normalization,它对所涉及的概念进行了很好的讨论。