Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 最佳数据库存储方法_Php_Mysql_Database_Normalization_Organization - Fatal编程技术网

Php 最佳数据库存储方法

Php 最佳数据库存储方法,php,mysql,database,normalization,organization,Php,Mysql,Database,Normalization,Organization,我的软件(用PHP编写)允许用户使用HTML表单为他们的“简历”输入信息。这份“简历”有几个不同的元素,包括用户的教育程度、工作经历、奖项、求职信等。每个元素所包含的数据都是独一无二的。例如,教育需要诸如毕业年份、学校名称、学位等领域 我的问题是,在mySQL数据库中存储简历数据的最佳方法是什么?我目前的选择是: 为每个简历元素(简历教育、简历奖励等)创建单独的表格 对简历的所有元素使用一个表,并以多维数组的形式插入元素数据。(即:一个包含简历数据的表格,其中包含教育、工作历史等列。教育或类似

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

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

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

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

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


看一看,它对涉及的概念进行了很好的讨论。

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


选项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

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

实际上,你的正反两方面的评估完全相反!我认为多个表比在一个表中遍历多个多维数组更容易维护。但我确实看到了你可能来自哪里,因为我不确定这两种方法对加载时间的影响。对于这样简单的东西,我不会担心加载时间。多个具有连接的表是一个不错的选择。这只是整个用户配置文件中的一个元素,需要支持多个用户和条目。感谢您提供的链接,我将再看一看(几个月前我也看到过)。很抱歉,无意中按了enter键,无论如何,就数据库本身的设计而言,我看不出列本身的内容对设计有任何影响,对吗?您会处理这种卷吗?另外,这取决于你的数据。您要硬编码电话号码和手机号码,还是允许用户添加任意数量的号码。这个评论总结了一下,规范化模型允许n个用户电话号码、屏幕名称、从属关系和工作历史。它也不关心这些项目的顺序。实际上,这可能更糟。现在,如果要为一份简历创建多个表,则需要对所有表进行索引并跨所有表进行查询。如果要添加新字段,该怎么办?创建一个新表并进行所有硬编码以使其正常工作。假设您只需添加一个新属性,设置它的名称,它在哪个部分下,以及它在该部分内的顺序,然后在那里敲打它以进行填充。但我想说的是,如果你从一个通用的角度来看待它,它将使它在未来变得更容易。此外,你可能只是学到了很多东西,并有一个很好的软件来炫耀。如果你想了解通用规模的极端,可以看看Drupals节点和内容类型。你可以用这些来创造任何东西。我不使用drupal,但我读过他们是如何使用的。没问题!正如那些文章所说,这并不总是最好的选择。但我认为这个应用程序非常适合学习如何做,它并不太复杂,将来需要时,您可以重复使用这些想法,以允许无限的电话号码或联系人等。尽量不要硬编码代码中的任何内容,因此当您在“个人详细信息”下添加新属性时,例如,它将自动出现在您的表单中,而无需任何额外代码。从数据库中构造表单。