Shakshoka1357 Ответов: 2

Создание листа посещаемости учащихся в MS access


Добрый день команда,
я учитель, а не ИТ-специалист, но мне нравится делать свою работу с помощью MSAccess
моя простая работа заключается в следующем:
1 - я преподаю несколько классов, например ( Gr10, Gr11, Gr12)
2 - я преподаю несколько предметов, например (математика, физика, химия)
3 - студент из одного класса может зарегистрироваться и посещать более одного предмета для одного и того же класса
лист посещаемости должен содержать поля (Session_Date, Grade, Subject, Student_Name)

эти четыре поля необходимо ввести через форму ввода данных.
до сих пор мне это кажется прекрасным, но у меня есть вызов, который заключается в следующем::

в этой форме, когда я выбираю оценку и предмет, мне нужно поле Student_Name, чтобы отобразить только студента, зарегистрированного для этого Гареда и предмета.

Что я уже пробовал:

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

2 Ответов

Рейтинг:
11

F-ES Sitecore

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

GradeID, GradeName

То же самое и с субъектом

SubjectID, SubjectName

Теперь создайте таблицу студентов

StudentID, StudentName

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

StudentGradeID, StudentID, GradeID, SubjectID

Все ваши поля идентификатора являются полями автономера первичного ключа, и поле GradeID в таблице оценок будет иметь отношение к полю GradeID в StudentGrade, то же самое с StudentID и SubjectID. При заполнении ваши таблицы будут выглядеть так

StudentID, StudentName
1, Джон
2, Дэйв

GradeID, GradeName
1, Gr10
2, Gr11

SubjectID, SubjectName
1, математика
2, английский язык

Так что если Дэйв занимается математикой Gr10 у вас будет это в StudentGrade

StudentGradeID, StudentID, GradeID, SubjectID
1, 2, 1, 1

теперь давайте добавим строки, чтобы сказать, что Джон занимается математикой Gr11 и английским языком Gr10 (новые строки имеют ID 2 и 3)

StudentGradeID, StudentID, GradeID, SubjectID
1, 2, 1, 1
2, 1, 2, 1
3, 1, 1, 2

Когда вы настроили свои данные таким образом, легко писать запросы, которые позволяют вам знать, какие оценки\предметы студенты делают с помощью соединений. Поэтому, если вы говорите о математике Gr10, это будет фильтр в таблице StudentGrade, где GradeID = 1 и SubjectID = 1, и если таблица Student объединена в StudentGrade через отношение на StudentID, вы можете получить имя студента.

Once you have your tables sorted like above you can do some further reading on joining tables and building Access forms where dropdown fields are the results of selects on the current form and it will hopefully become clearer what to do, but the important thing is that the above data structure will make it possible to write the queries you want and to store the data in a manner you want. Your original database design makes it much harder as there is a lot of "matching" between tables based on text alone and that will always end in tears as you'll write "Maths" for one person and "Math" for another and your data integrity starts to fall apart.


Shakshoka1357

Дорогая, это было потрясающее объяснение специально для такого не-ИТ-человека, как я,
на самом деле у студента может быть несколько предметов, но с одним и тем же классом, так как студент не может быть 10-м и 11-м классами одновременно,
поэтому в моей таблице master student я делаю так, чтобы она содержала: SubjectID, SubjectName, Student Grade
и вместо таблицы StudentGrade я создал таблицу StudentSubject, содержащую StudentID, SubjectID

Рейтинг:
1

Shakshoka1357

Спасибо Ричард