2010-12-21 3 views
1

온라인 신청서를 작성하고 있으며 수집하려는 데이터 중 하나는 사용자 교육 기록입니다. 학교 이름, 학교 도시, 거기에 있었던 년 및 성과가 있습니다. 이 데이터는 0에서 4 개의 다른 학교 사이에서 수집 될 수 있으며 사용자는 필요에 따라 더 많은 필드를 동적으로 추가합니다.알 수없는 행을 MySQL 데이터베이스에 삽입

내 질문에 사용자가 추가 할 학교가 몇 개인 지 알 수 없기 때문에이 질문을 데이터베이스에서 어떻게 캡처 할 수 있습니까? 하나의 테이블에서 수행 할 수 있습니까, 아니면 여러 테이블을 만들고 별도의 테이블에 교육 데이터를 캡처해야합니까?

어떤 도움이나 조언이라도 대단히 감사하겠습니다.

감사합니다.

+3

당신이 [데이터베이스 정규화 (http://en.wikipedia.org/wiki/Database_normalization)에 위키 백과 문서에 읽기를 포기하는 것이 좋습니다 ... – ircmaxell

답변

3

별도의 테이블이 필요합니다. 1 인당 행이 있고 다른 하나는 학교 당 연속입니다. 학교는 학교 테이블에있는 personID 나 "학교에 다니는 사람"관계를 나타내는 추가 테이블을 사용하는 사람들과 관련 될 수 있습니다.

하나의 엔티티 (인물)와 여러 개의 다른 엔티티 (학교)와의 모든 연관은 하나 이상의 테이블을 필요로합니다. "엔터티"당 하나의 테이블과 다 대다 관계에 대한 추가 테이블이 뒤 따릅니다.

1

교육용으로 별도의 테이블을 만들고 PHP로 "교육"을 별도의 클래스로 모델링하십시오.

1

이 용어는 정규화입니다. 한 행의 데이터가 간결하고 가능한 한 적은 정보가 반복되도록 여러 테이블을 구조화하려고합니다. 이것은 당신의 머리에서 어떤 정보가 반복 될 것인지를 알아 내고, 그 정보를위한 테이블을 만드는 것입니다.

테이블 사이의 데이터는 기본 키를 통해 연결됩니다 (자동 증가 정수). 이 경우 학생과 교육이라는 두 개의 표가 있습니다. 학생 테이블에는 '학생 ID, 이름 등'이 있고 교육 테이블에는 'EducationID, StudentID, SchoolName, SchoolCity, SchoolStudentID 등'이 있어야합니다. 그래서,

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

는 사실,이 이상에 걸쳐 반복 'SchoolName'와 'SchoolCity'을 가질 것이다 : Student.StudentID가 Education.StudentID와 일치합니다 다음과 같은 쿼리를 획득 할 수

주 이것은 완전히 정규화되지 않았습니다. 계속하려면, 당신은 다시 그것을 조금 변경해야

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 
관련 문제