Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.01.2011, 16:01
Fides Fides вне форума
Прохожий
 
Регистрация: 28.01.2011
Сообщения: 8
Репутация: 10
По умолчанию БД ВУЗ

Создается БД ВУЗ, ведется учет студентов, предметов, преподавателей и т д. Также в БД должны хранится результаты сдачи студентами зачетов, и екзаменов. Некак не получается организовать даную возможность, скажем так оптимально организовать. Как субд используется Firebird, но в моем случае не важно Какая субд, мне бы любой пример как можно хранить результаты студентов. С етими результатами в будущем предпологается работать дальше, тоисть определять успешные и не успешные групы, сравнивать разные групы и т д. Даную БД создаю для Магистерской. Хоть практического применения она не будет иметь, но проверять будут тщательно. Количество Студентов в среднем 15 тысяч. Буду рад любым советами. Если не понятно изложил вопрос пишите, попытаюсь изложить по другому. Прошу помощи сдесь так как сам пришол в тупик и не вижу выхода.
Ответить с цитированием
  #2  
Старый 28.01.2011, 16:24
Аватар для movnet
movnet movnet вне форума
Начинающий
 
Регистрация: 24.07.2008
Сообщения: 127
Версия Delphi: Delphi 7
Репутация: 23
По умолчанию

Ты начинай работать а народ если будет нужно поможет.
Ответить с цитированием
  #3  
Старый 28.01.2011, 16:33
Fides Fides вне форума
Прохожий
 
Регистрация: 28.01.2011
Сообщения: 8
Репутация: 10
По умолчанию

Да я работаю)
В БД созданы таблицы Студенты, Преподаватели, Групы, Предметы и так далее.
Вот когда прихожу к созданию таблиц для учета успеваемости все стопор.
Пытаясь создавать ее по образу:

ID|ID_Stud|ID_Object|ID_Teacher| ...

Получается что все время у меня повторяеются студенты , и предметы , должен быть какой то выход но не вижу его.
Пытался по другому создавая для каждой групы свою таблицу, но как на меня тоже не вариант. Нужна хоть какая то идея, а то стою на месте.
Ответить с цитированием
  #4  
Старый 28.01.2011, 17:23
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Не пойму в чем тупик то?
Например
[Table_Group]
ID Group
[Table_Student]
ID FIO IDGroup

[Table_Predmet]
ID Predmet

тогда оценки по предметам будет таблица
ID IDFIO IDPredmet Ocenka

Создавать для каждой группы отдельную таблицу не стоит.
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #5  
Старый 28.01.2011, 17:43
Fides Fides вне форума
Прохожий
 
Регистрация: 28.01.2011
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Black Raider
Не пойму в чем тупик то?
Например
[Table_Group]
ID Group
[Table_Student]
ID FIO IDGroup

[Table_Predmet]
ID Predmet

тогда оценки по предметам будет таблица
ID IDFIO IDPredmet Ocenka

Создавать для каждой группы отдельную таблицу не стоит.

Суть в следующем:
Каждый студент в каждом семестре сдает 10 предметов в среднем. Написав как ты советуеш я и сам пытался, получается что нам прийдется для каждого студента писать:
ID_STUD ID_PREDMET
stud1 Predmet1
stud1 Predmet2
.
.
stud1 Predmet10
потом также для второго студента и т д . Поскольку стедентов 15 тыс. То на 1 семестер ето будет 150 тысяч записей. По моему слишком много, и я считаю что должен быть какойто обход для етого повторения даных типа:
ID_STUD ID_PREDMET
Чтото с помощью дополнительного расбивания на таблицы или тому подобное. Вот в етом моя проблема собственно. Мжет быть ето считается нормальным , ктото из знающих подскажет но насколько помню одно из правил Нормализации БД какраз говорит что такие вот случаи надо выключать с помощю расбивки на дополнительные таблицы.
Ответить с цитированием
  #6  
Старый 28.01.2011, 17:49
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Как раз таки нормализация данных говорит о том что б не было повторяющихся данных!!!(это так, в общем)
Разбитие на таблицы и бессмысленно и трудоемко в плане выполнения запросов.
150 К записей это не много.
потом, это таблица связей.
Где вы увидали повторяющиеся записи?
по большому счету в этой таблице еще поле Semestr
и так представим
студенты 1 Иванов
2 Петров
3 Сидоров

Предметы
1 математика
2 азбука
3 Письмо

Семестры
1 01.09.2010-01.01.2011
2 01.01.2011-01.06.2011

в итоге будем иметь
таблицу вида:
Студент Предмет Семестр Оценка
1 1 1 4
1 2 1 4
1 3 1 2
2 1 1 2
2 2 1 3
2 3 1 4
3 1 1 5
3 2 1 4
3 3 1 5

Покажите мне хоть одну повторяющуюся запись? не поле в таблице а именно запись (если понятней строку!)

а следуя вашей логике, надо создавать на каждого студента по таблице.
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"

Последний раз редактировалось Black Raider, 28.01.2011 в 17:55.
Ответить с цитированием
  #7  
Старый 28.01.2011, 17:55
Fides Fides вне форума
Прохожий
 
Регистрация: 28.01.2011
Сообщения: 8
Репутация: 10
По умолчанию

Ну мб не много, моя логика совсем не имела ввиду создавать таблицу для каждого студента, а просто имела ввиду можно ли как небудь уйти от того чтобы все время записывать Студент - предмет, и потом повторять это. ИБо я смотрю какбы со стороны что ведь студент не меняется , изменяются только предметы в даном случаю. Или записывать даным способ вполне примемлемое и привычное дело?
Если так нормально писать тогда гуд, а то как всегда ищу какоето решение ибо считаю что первое пришедшое не единственное, и не совсем правильное. Если так как вы предлагает вполне нормально писать тогда вопросов больше нет, просто нету опыта чтобы самому судить насколько правильно все это). Спасибо за помощ.

Последний раз редактировалось Fides, 28.01.2011 в 18:06.
Ответить с цитированием
  #8  
Старый 28.01.2011, 18:02
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Цитата:
можно ли как небудь уйти от того чтобы все время записывать Студент - предмет
Угу, можно, конечно. если вам в принципе не нужны данные в связке студент предмет.

в принципе можете завести еще одну таблицу
ID IDStudent IDPredmet

писать в нее практически тоже кол-во записей а в таблицу с оценками вставлять ID из этой таблицы.
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #9  
Старый 28.01.2011, 18:08
Fides Fides вне форума
Прохожий
 
Регистрация: 28.01.2011
Сообщения: 8
Репутация: 10
По умолчанию

Что я выиграю от того что сделаю две таблицы в которых будет столько же записей? Судя по всему нечего оно изменить же не должно, и как вы писали выше можно записать все в одну таблицу.
Ответить с цитированием
  #10  
Старый 28.01.2011, 18:09
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

В данном случае абсолютно ничего.
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #11  
Старый 28.01.2011, 18:16
Fides Fides вне форума
Прохожий
 
Регистрация: 28.01.2011
Сообщения: 8
Репутация: 10
По умолчанию

Тогда сделаю все в одной таблице. ищо раз спасибо.
Ответить с цитированием
  #12  
Старый 19.04.2011, 21:50
dunasha dunasha вне форума
Прохожий
 
Регистрация: 20.03.2011
Сообщения: 6
Репутация: 10
По умолчанию

Подскажите и покажите пожалуйста как мне реализовать сводную ведомость в dbdrid или stringGrid, примером, чтобы в первом столбце у меня выходили фамилии студентов, второй столбец высчитывал коэффициент успеваемости, а начиная с третьего выводились названия предметов!
Все данные беруться из таблиц Paradox.
Ответить с цитированием
  #13  
Старый 20.04.2011, 07:05
Аватар для th_bav
th_bav th_bav вне форума
Новичок
 
Регистрация: 02.12.2010
Сообщения: 74
Репутация: 10
По умолчанию

Цитата:
Сообщение от dunasha
Подскажите и покажите пожалуйста как мне реализовать сводную ведомость в dbdrid или stringGrid, примером, чтобы в первом столбце у меня выходили фамилии студентов, второй столбец высчитывал коэффициент успеваемости, а начиная с третьего выводились названия предметов!
Все данные беруться из таблиц Paradox.
Я бы написал SQL-запрос и засунул его в Query, или у Вас вся сложность в самом запросе??? Тогда необходимо структуру базы посмотреть
__________________
Глаза боятся - Руки делают...
А еще я не внимательный...
Ответить с цитированием
  #14  
Старый 20.04.2011, 07:18
Аватар для th_bav
th_bav th_bav вне форума
Новичок
 
Регистрация: 02.12.2010
Сообщения: 74
Репутация: 10
По умолчанию

Цитата:
Сообщение от Fides
Как субд используется Firebird, но в моем случае не важно Какая субд, мне бы любой пример как можно хранить результаты студентов.
Я бы на Вашем месте MS Access использовал, он проще чем серверная база, он есть почти на каждом ПК, да и помощи по нему будет больше. Честно говоря не вижу необходимости ставить сервер, тем более для одной таблицы, да и пользователей у Вас будет не много, а если хорошо спроектировать клиентскую часть, то одного человека хватит чтобы быстро извлечь данные.... тем более раз у Вас одна таблица, то и записей будет 15 тысяч
P.S.Судя по информации из интернета у Access максимальный размер БД 2ГБ, думаю Вам с лихвой хватит...
__________________
Глаза боятся - Руки делают...
А еще я не внимательный...
Ответить с цитированием
  #15  
Старый 20.04.2011, 08:21
dunasha dunasha вне форума
Прохожий
 
Регистрация: 20.03.2011
Сообщения: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от th_bav
Я бы написал SQL-запрос и засунул его в Query, или у Вас вся сложность в самом запросе??? Тогда необходимо структуру базы посмотреть
Ну наверное в SQL-запросе, У меня проблема в выводе названий предметов в заголовках столбцов, это наверное не просто sql-запросом делается.
Есть таблицы:stud(id,stud_fam,id_gr,GodPostup)
group(id_gr,name)
ucheb_plan(id_semestr,id_spec,id_discip)
discip(id_discip,name)
vedomost(id-spec,id_gr,id_stud,id_discip,id_semestr)
Код для заполнения таблицы, я пока только смогла сделать заполнение фамилий сортируя по группе и году поступления
Код:
procedure TForm1.TreeView1DblClick(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT ss.Stud_fam FROM stud ss, groups g');
Query1.SQL.Add('WHERE ss.Id_gr=g.Id_gr and g.Name='+TreeView1.Selected.Text+'and');
Query1.SQL.Add('ss.GodPostup='+QuotedStr(ComboBox1.Text));
Query1.Open;

dbgrid1.Columns.Items[0].Width:=100;
dbgrid1.Columns[0].Title.Caption:='ФИО';
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter