我正在写一个在线申请表,我试图收集的其中一个数据是用户的教育历史;学校名称,学校城市,他们在那里的岁月和那里的成就。可以在零到四个不同学校之间的任何地方收集这些数据,如果需要,用户将动态添加更多字段。
我的问题是如何在数据库中捕获这些内容,因为我不知道用户将添加多少所学校?它可以在一个表中完成,还是需要创建多个表并在单独的表中捕获教育数据?
非常感谢任何帮助或指示。
感谢。
答案 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