Вставка неизвестного количества строк в базу данных MySQL - PullRequest
1 голос
/ 21 декабря 2010

Я пишу онлайн-заявку, и одна из данных, которую я пытаюсь собрать, - это история обучения пользователей;название школы, школьный город, годы, в которых они находились, и достижения, достигнутые там.Эти данные могут быть собраны в любом месте от нуля до четырех разных школ, и пользователь будет динамически добавлять дополнительные поля, если потребуется.

Мой вопрос заключается в том, как это будет записано в базе данных, поскольку я не знаю, каксколько школ будет добавлять пользователь?Можно ли это сделать в одной таблице, или мне нужно создать несколько таблиц и записать данные об образовании в отдельную таблицу?

Любая помощь или указатели будут с благодарностью.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 21 декабря 2010

Вам нужны отдельные таблицы.Один со строкой на человека, а другой со строкой на школу.Школы могут относиться к людям, использующим либо personID в школьной таблице, либо дополнительную таблицу, представляющую отношения «человек посещал школу».

Любая ассоциация одного лица (человека) с несколькими другими организациями (школами) требуетнесколько таблиц. Общее правило, которое нужно соблюдать, - это одна таблица на «сущность», плюс дополнительные таблицы для отношений «многие ко многим».

1 голос
/ 21 декабря 2010

Термин для этого - нормализация. Вы хотите структурировать несколько таблиц таким образом, чтобы одна строка данных была краткой и как можно меньше информации повторялось. Это можно сделать, выяснив в своей голове, какие фрагменты информации будут повторяться, и составив таблицу для этой информации.

Данные между таблицами связаны через первичные ключи (возможно, с автоматическим приращением целых чисел). В этом случае у вас будет две таблицы: студент и образование. Таблица 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

Примечание: у каждого учащегося есть разные идентификаторы учеников в каждой школе, которую они посещают, - не путайте это с целым числом с автоинкрементом StudentID. Чтобы получить список в этом случае:

select Student.*, Education.StudentSchoolID, School.* from
  Student left join Education on Student.StudentID = Education.StudentID
  left join School on Education.SchoolID = School.SchoolID
1 голос
/ 21 декабря 2010

Составьте отдельную таблицу для обучения и смоделируйте «образование» в php как отдельный класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...