Итак, БД у нас создана и пора ее формировать. Для этого нам нужно понять какие данные мы будем ней хранить. Начнем с основной таблицы studens, в которой и будет хранится вся информация об учениках. Давайте подумаем какие это данные:
- ФИО ученика
- Год обучения
- Литера класса
- Пол
- Дата рождения
- ФИО Классного руководителя
Для начала достаточно, но стоит помнить, что в дальнейшем мы сможем масштабировать БД, и в случае необходимости добавлять данные и таблицы.
Среди указанных данных уникальными данными являются ФИО ученика и Дата рождения. Остальные данные для всех учеников будут повторятся. Вот эти повторяющиеся данные мы и вынесем в отдельные таблицы, связав их с основной через ключевые ID. Начнем мы именно с таблиц с константами.
Таблица Пол (gender)
Для таблицы gender нам понадобятся следующие столбцы:
gender_id – ключевой ID таблицы. Нужен для связи таблиц gender и students. Представляет собой уникальное (для таблицы) цифровое обозначение. Цифровое значение c AUTO_INCREMENT (INT).
Тип данных INTEGER поддерживает числовое значение до… цифр. Конечно есть только два гендера, но кто знает куда пойдет история в дальнейшем.
gender_name – название пола на русском. Ну собственно основная информация таблицы. Текстовое значение длиной 255 символов (VARCHAR 255). Тут точно так же можно было бы обойтись меньшим значением, но при разработке БД всегда стоит перестраховаться и предположить, что может появиться третий гендер с названием боевойвертолетапач.
gender_abc –сокращенное обозначение М/Ж. Добавляем на всякий случай, для сокращенного вывода пола на экран. Текстовое значение длиной (VARCHAR 128). Ну и тут тоже перестраховываемся и закладываем возможность длинных абривеатур.
Таблица Год обучения (group_age)
Для этой таблицы нам понадобятся столбцы:
gage_id – ключевой ID таблицы. Нужен для связи таблиц group_age и students. Представляет собой уникальное (для таблицы) цифровое обозначение. Цифровое значение c AUTO_INCREMENT (INT).
gnum – цифровое значение (INT). Да, предполагается, что предусмотрено 4 года обучения. Но например наше веб-приложение запускается с первого года работы школы и второго, третьего и четвертого классов просто нет. Или школа приняла решение увеличить количество лет обучения, или уменьшить, как это было в середине 90-х годов XX века.
Таблица Литера класса (group_abc)
В принципе, структура почти та же самая, что и в таблице group_age. Но давайте добавим еще и информацию о Классном руководителе.
gabc_id – ключевой ID таблицы. Нужен для связи таблиц group_abc и students. Представляет собой уникальное (для таблицы) цифровое обозначение. Цифровое значение c AUTO_INCREMENT (INT).
gabc_char — собственно хранилище литер от А до Г, с возможностью увеличения и уменьшения. Текстовое значение (VARCHAR 128).
teacher_id – ключевой ID таблицы group_teacher. Для связывания этих двух таблицы.
В принципе, Классных руководителей пока предполагается четверо, по количеству литер. Но не будем забывать про возможность масштабирования. Отдельная таблица Классных, может в дальнейшем содержать информации намного больше, чем ФИО. И нам необходимо, что бы изменения никак ни коснулись остальных таблиц.
Таблица Учителя (teachers)
В этой таблице будем хранить данные учителей, которые являются Классными руководителями. Но в дальнейшем мы можем из этой таблицы сделать более детализированное хранилище данных и добавить, например специализацию учителя (предмет). Из чего возможно получится сделать журнал, но это вопрос будущего и следующихитераций.
Структура таблицы teachers будет следующей:
teacher_id – ключевой ID таблицы. Нужен для связи таблиц group_abc и teachers. Представляет собой уникальное (для таблицы) цифровое обозначение. Цифровое значение c AUTO_INCREMENT (INT).
teacher_lname – столбец для Фамилии Учителя (last name/lname). Текстовое значение (VARCHAR 128).
teacher_fname – столбец для Имени Учителя (first name/fname). Текстовое значение (VARCHAR 128).
teacher_patronym – столбец для Отчества Учителя (patronym). Текстовое значение (VARCHAR 128).
С одной стороны, ФИО можно было бы хранить в одном столбце. Но чем более структурированы данные, тем проще будет с ними работать в дальнейшем. К слову, так же мы поступим и с таблицей students.
Таблица Ученики (students)
Ну вот мы и добрались до основной таблице, в которой будут хранитьа данные учеников: students. Структура будет следующая:
student_id – ключевой ID таблицы. Представляет собой уникальное (для таблицы) цифровое обозначение. Цифровое значение c AUTO_INCREMENT (INT).
student_lname – по аналогии с таблицей teachers. Текстовое значение (VARCHAR 128).
student_fname – по аналогии с таблицей teachers. Текстовое значение (VARCHAR 128).
student_patronim – по аналогии с таблицей teachers. Текстовое значение (VARCHAR 128).
gender_id, gage_id, gabc_id – В этом столбце будут храниться значения ID соответствующих таблиц. Через эти ID мы в итоге и будем подтягивать текстовые значения из других таблиц. Цифровое значение без AUTO_INCREMENT (INT).
Весь процесс проектирования и структурирования БД мы параллельно создавале в визуальном конструкторе drawDB. Результат на диаграмме ниже.

Теперь нам осталось перенести Проект Базу в нашу БД на хостинге. Тут у нас 2 варианта, либо открыть phpMyAdmin и руками еще раз воспроизвести все действия, создать таблицы, обозначить столбцы и так далее. Либо мы в меню нажимаем Файл > Экспорт в SQL и получаем готовый SQL-код.
CREATE TABLE IF NOT EXISTS `gender` (
`gender_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`gender_name` VARCHAR(255),
`gender_abc` VARCHAR(255),
PRIMARY KEY(`gender_id`)
);
CREATE TABLE IF NOT EXISTS `group_age` (
`gage_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`gnum` INTEGER,
PRIMARY KEY(`gage_id`)
);
CREATE TABLE IF NOT EXISTS `group_abc` (
`gabc_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`gabc_char` VARCHAR(255),
`teacher_id` INTEGER,
PRIMARY KEY(`gabc_id`)
);
CREATE TABLE IF NOT EXISTS `teachers` (
`teacher_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`teacher_fname` VARCHAR(255),
`teacher_lname` VARCHAR(255),
`teacher_patronym` VARCHAR(255),
PRIMARY KEY(`teacher_id`)
);
CREATE TABLE IF NOT EXISTS `students` (
`student_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`student_fname` VARCHAR(255),
`student_lname` VARCHAR(255),
`student_patronim` VARCHAR(255),
`gender_id` INTEGER,
`gage_id` INTEGER,
`gabc_id` INTEGER,
PRIMARY KEY(`student_id`)
);
Открываем phpMyAdmin, выбираем вкладку SQL, вставляем в текстовое поле указанный выше код, и нажимаем кнопку «Вперед». Пара секунд ожидания, и готово! У нас с вами полноценная БД с необходимыми таблицами и структурой!


