powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / БД "Студенты"
3 сообщений из 3, страница 1 из 1
БД "Студенты"
    #38059597
Mizax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спроектировал я значит по заданию БД.
Задание: Имеются следующие данные о потоке студентов пятого курса:
1. Код группы
2. Количество студентов в группе
3. Номер зачетной книжки студента
4. ФИО студента
5. Количество пропущенных в семестре часов по уважительной причине и без уважительной причины по каждому студенту
6. Количество часов, которое должен посетить каждый студент за семестр
7. Количество попаданий в список неуспевающих каждого студента
8. Наименование дисциплин, по которым студент должен был сдавать экзамены в прошедшую сессию
9. Оценки студента по всем дисциплинам, полученные в сессию
10. Тип дисциплины (общественные и экономические, математические, специальные)



Вот, что у меня получилось.

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

Получился вот такой запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
SELECT student.recordbook_num as "№ зач. книжки", 
       student.FIO AS "ФИО",
       stgroup.group_code AS "Код группы"  
FROM student 
              INNER JOIN (SELECT x.recbook as rcrdbk
                          FROM (SELECT y.rb_n AS recbook, 
                                       COUNT(grade_id) AS cnt, 
                                       grade.grade AS grd 
                               FROM (SELECT student.recordbook_num AS rb_n, 
                                            SUM(absence.withoutvalidreason) AS wovr 
                                     FROM student 
                                          INNER JOIN absence ON absence.recordbook_num=student.recordbook_num
                                     GROUP BY student.recordbook_num) y 
                               INNER JOIN wastopass ON y.rb_n=wastopass.recordbook_num 
                               INNER JOIN grade ON grade.wtp_id=wastopass.wtp_id
                          WHERE y.wovr = 0 
                                AND (wtptype='экз'
                                    OR wtptype='кр'
                                    OR wtptype='кп')
                          GROUP BY y.rb_n, 
                                   grade.grade) x
                         WHERE x.grd='уд' 
                               AND x.cnt=(SELECT MIN(COUNT(wastopass.wtp_id)) 
                                          FROM wastopass 
                                               INNER JOIN stsession on wastopass.session_id=stsession.session_id
                                          WHERE (wastopass.wtptype='экз' 
                                                OR wastopass.wtptype='кр'
                                                OR wastopass.wtptype='кп')
                                                AND stsession.session_id=1
                                          GROUP BY stsession.session_id, 
                                                   recordbook_num)) z ON z.rcrdbk=student.recordbook_num
               INNER JOIN stgroup ON student.group_id=stgroup.group_id;


Вопрос: Это вообще нормально или может быть я неправильно спроектировал базу?
P.S. Да, с английским у меня не очень получилось.
...
Рейтинг: 0 / 0
БД "Студенты"
    #38061134
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MizaxВопрос: Это вообще нормально или может быть я неправильно спроектировал базу?
Я бы сказал так. Во-первых, само задание плохо поставлено. Буквально во второй строке - "количество студентов в группе" - уже поле, которого быть не должно. Это значение подсчитывается как количество записей студентов, привязанных к группе. Во-вторых, для первого раза Вы сделали не так уж и плохо, но ошибок тоже хватает. Например, в absence непонятна привязка к предмету (может быть, Вы имели в виду протянуть ключ к сессии?). А основная, имхо, проблема - в Вашей структуре непонятен фактор времени. Эта информация за семестр? За год? За все годы?

Так или иначе, что касается запроса, советую подумать вот над чем: студент, который получил все тройки - это студент, который не получил ни одной не-тройки. Очень удобная конструкция, чтобы отфильтровать список с помощью outer join.
...
Рейтинг: 0 / 0
БД "Студенты"
    #38071093
Mizax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerВо-первых, само задание плохо поставлено. Буквально во второй строке - "количество студентов в группе" - уже поле, которого быть не должно. Это значение подсчитывается как количество записей студентов, привязанных к группе.
Полностью согласен, об этом я даже как-то и не подумал.
softwarerНапример, в absence непонятна привязка к предмету (может быть, Вы имели в виду протянуть ключ к сессии?). А основная, имхо, проблема - в Вашей структуре непонятен фактор времени. Эта информация за семестр? За год? За все годы?
Да, информация за семестр, привязка через stsession, с тех пор как я опубликовал, я добавил в absence session_id.
Спасибо за ваш комментарий.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / БД "Студенты"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]