【问题标题】:Inserting unknown number of rows into a MySQL database将未知数量的行插入 MySQL 数据库
【发布时间】:2010-12-21 13:52:41
【问题描述】:

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

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

任何帮助或指点将不胜感激。

谢谢。

【问题讨论】:

标签: php mysql insert


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这方面的术语是标准化。您希望构建多个表,以使一行数据简洁,并尽可能少地重复信息。这可以通过在您的脑海中确定哪些信息将被重复,并为该信息制作一个表格来完成。

      表之间的数据通过主键链接(希望是自动递增整数)。在这种情况下,您将有两个表:学生和教育。 Student 表将包含“StudentID、Name 等”,而 Education 表将包含“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 - 不要将此与自动递增整数“学生 ID”混淆。在这种情况下获取列表:

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

      【讨论】:

        猜你喜欢
        • 2011-05-27
        • 1970-01-01
        • 2012-06-01
        • 2017-03-16
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 2016-01-29
        • 2018-09-10
        相关资源
        最近更新 更多