Intereting Posts
изменить адрес электронной почты отправителя в php-форму получателю mysqli_store_result () vs. mysqli_use_result () Загрузите файл с помощью HTTP. ошибка: – HttpSendReuest 12005 Различные стили CSS для последнего элемента php-массива Экспертные мнения по очень большому количеству столбцов в таблице mySQL? «Доступ запрещен для пользователя» после перемещения базы данных MySQL на удаленный сервер Как я могу исправить ошибку MediaWiki? Wiki использует файлы cookie для входа в систему. У вас отключены файлы cookie. Пожалуйста, включите их и повторите попытку. "? Обтекание длинного текста в CSS Изменение размера изображений с помощью PHP Форма не сохраняется в базе данных Echo строка с переменной внутри, полученная из БД Можно ли включить функцию внутри другой функции? PHP preg_replace_callback игнорировать идентификатор (Re) форматирование PHP-кода в Vim Как проверить на PHP, что я в статическом контексте (или нет)?

Как я могу сделать эту концептуальную модель лучше?

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

В моей стране обычно в течение учебного года шесть (6) периодов. Период составляет 4 недели. Также в учебном году есть два (2) семестра, продолжительность которых составляет 3 с половиной месяца. В каждом семестре есть четыре (4) термина.

Вот картина, которая объясняет, как выглядят вещи:

введите описание изображения здесь

Поскольку я должен генерировать отчет каждого ученика за определенный период семестра, так выглядит моя концептуальная модель:

Стол учеников:

students -------- id * name grade_id (fk) 

Таблица предметов:

 subjects -------- id * name 

Таблица классов:

 grades -------- id * name 

Примечание. Таблица классов хранит имя каждого класса в школе. ех. grade 12 , grade 11 и т. д.

Теперь это таблицы, в которых хранятся оценки учащихся для предметов определенного периода или семестра.

 period_one (1st Period) ----------------------- id * student_id (fk) subject_id (fk) grade_id (fk) score first_exam (1st Sem. Exam) ----------------------- id * student_id (fk) subject_id (fk) grade_id (fk) score period_four (4th Period) ----------------------- id * student_id (fk) subject_id (fk) grade_id (fk) score 

Обратите внимание, то же самое верно для second period , third period , 5th period , six period т. Д.

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

Но есть причина, почему я сделал это таким образом, и это связано с созданием отчетов. С помощью этой настройки я могу легко структурировать свои запросы для создания отчетов.

Это запрос, который я использовал для создания периодических отчетов

 // the function runs a select all query for all the period/term grades tables // It displays the periodic grades sheet $student_id = 1; // any id could be passed $term = "period_one"; // giving the exact table name to fetch record from $class_id = 2; // 2 may represent grade 12 in this case. function periodic_report($term, $student_id, $class_id) { global $connection; $query = "SELECT $table.student_id, score, subject_name, class_name from $term INNER JOIN students ON students.student_id = $table.student_id INNER JOIN classes ON classes.class_id = $table.class_id INNER JOIN subjects ON subjects.subject_id = $table.subject_id WHERE $table.student_id = $student_id AND $table.class_id = $class_id"; $result_set = mysqli_query($connection, $query); // Test if there was a query/syntax error confirm_query($result_set); return $result_set; } 

вот как выглядит результат:

введите описание изображения здесь

Запрос для генерации отчетов первого семестра:

 // the function runs a select all query for semester grades // It displays the first semester grades sheet function first_semester_report($student_id) { global $connection; $query = "SELECT subjects.subject_name, period_one.score, period_two.score, period_three.score, first_exam.score FROM subjects LEFT JOIN period_one ON period_one.subject_id = subjects.subject_id AND period_one.student_id = {$student_id} LEFT JOIN period_two ON period_two.subject_id = subjects.subject_id AND period_two.student_id = {$student_id} LEFT JOIN period_three ON period_three.subject_id = subjects.subject_id AND period_three.student_id = {$student_id} LEFT JOIN first_exam ON first_exam.subject_id = subjects.subject_id AND first_exam.student_id = {$student_id} LEFT JOIN students ON students.student_id = {$student_id} WHERE period_one.subject_id = subjects.subject_id OR period_two.subject_id = subjects.subject_id OR period_three.subject_id = subjects.subject_id OR first_exam.subject_id = subjects.subject_id ORDER BY subjects.subject_name"; $result_set = mysqli_query($connection, $query); if(!$result_set){ die("Database query failed. Error from first semester report: ".mysqli_error($connection)." Error number is: ".mysqli_errno($connection)); } // Test if there was a query/syntax error //confirm_query($result_set); return $result_set; } 

Запрос для генерации отчета второго семестра:

 // the function runs a select all query for semester grades // It displays the second semester grades sheet function second_semester_report($student_id) { global $connection; $query = "SELECT subjects.subject_name, period_four.score, period_five.score, period_six.score, second_exam.score FROM subjects LEFT JOIN period_four ON period_four.subject_id = subjects.subject_id AND period_four.student_id = {$student_id} LEFT JOIN period_five ON period_five.subject_id = subjects.subject_id AND period_five.student_id = {$student_id} LEFT JOIN period_six ON period_six.subject_id = subjects.subject_id AND period_six.student_id = {$student_id} LEFT JOIN second_exam ON second_exam.subject_id = subjects.subject_id AND second_exam.student_id = {$student_id} LEFT JOIN students ON students.student_id = {$student_id} WHERE period_four.subject_id = subjects.subject_id OR period_five.subject_id = subjects.subject_id OR period_six.subject_id = subjects.subject_id OR second_exam.subject_id = subjects.subject_id ORDER BY subjects.subject_name"; $result_set = mysqli_query($connection, $query); if(!$result_set){ die("Database query failed. Error from second semester report: ".mysqli_error($connection)." Error number is: ".mysqli_errno($connection)); } // Test if there was a query/syntax error //confirm_query($result_set); return $result_set; } 

так выглядит отчет о семестре, основанный на запросе на семестр: введите описание изображения здесь

Время от времени я беспокоюсь, что это можно сделать лучше, но позор – это я не знаю, как это сделать.

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

Поймите практические последствия и предложения. Благодаря!!!!

Related of "Как я могу сделать эту концептуальную модель лучше?"