将未知行数插入MySQL数据库

时间:2010-12-21 13:52:42

标签: php mysql insert

我正在写一个在线申请表,我试图收集的其中一个数据是用户的教育历史;学校名称,学校城市,他们在那里的岁月和那里的成就。可以在零到四个不同学校之间的任何地方收集这些数据,如果需要,用户将动态添加更多字段。

我的问题是如何在数据库中捕获这些内容,因为我不知道用户将添加多少所学校?它可以在一个表中完成,还是需要创建多个表并在单独的表中捕获教育数据?

非常感谢任何帮助或指示。

感谢。

3 个答案:

答案 0 :(得分:3)

您需要单独的表格。一个人每人一排,另一个人每个学校一排。学校可以与使用学校表格中的personID或表示“入学人员”关系的附加表格相关联。

一个实体(人)与多个其他实体(学校)的任何关联都需要多个表。遵循的一般规则是每个“实体”一个表,以及多对多关系的附加表。

答案 1 :(得分:1)

为教育制作一个单独的表,并在php中将“教育”建模为一个单独的类。

答案 2 :(得分:1)

这个术语是标准化。您希望构造多个表,使得一行数据简洁,并且尽可能少地重复信息。这可以通过在脑海中弄清楚哪些信息将被重复,并为该信息制作一个表来完成。

表之间的数据通过主键链接(希望自动增加整数)。在这种情况下,您将有两个表:学生和教育。学生表将具有“学生ID,姓名等”,而教育表将具有“EducationID,StudentID,SchoolName,SchoolCity,SchoolStudentID等”。

请注意,Student.StudentID与Education.StudentID匹配,可以使用以下查询获取:

select Student.*, Education.* from Student left join Education on Student.StudentID = Education.StudentID

事实上,这会让'SchoolName'和'SchoolCity'一遍又一遍地重复,所以这并没有完全正常化。要继续,您需要再次更改它:

Student: StudentID, Name, etc
School: SchoolID, SchoolName, SchoolCity, etc
Education: StudentID, SchoolID, StudentSchoolID, etc

注意:每个学生在他们参加的每所学校都有不同的学生ID - 不要将其与自动增量整数'StudentID'混淆。要获得这种情况下的列表:

select Student.*, Education.StudentSchoolID, School.* from
  Student left join Education on Student.StudentID = Education.StudentID
  left join School on Education.SchoolID = School.SchoolID