powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / структура таблицы, позволяющая объединить несколько записей??
18 сообщений из 18, страница 1 из 1
структура таблицы, позволяющая объединить несколько записей??
    #34227705
Nike85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте и с наступающим!
Такой вопрос - создаю базу данных выпускников вуза (примерный объем выпускников в год ~2500). В базе необходимо хранить информацию о успеваемости выпускников (т.е. список дисциплина-оценка для каждого). Количество дисциплин для одного выпускника колеблется в пределах 40-60 штук. Как лучше организовать структуру для хранения данных об успеваемости, так:
1) Таблица "Успеваемость"
поле IDVypusknik - integer - служит для связи с таблицей выпускников
поле IDDiscipl - integer - служит для связи с таблицей дисциплин
поле Ball - integer - соответственно здесь хранится полученная оценка

При использовании такой структуры на каждого студика в таблице успеваемости будет создаваться ~40-60 записей. Это мне не очень нравится, поэтому привожу другой вариант организации таблицы успеваемости:

вот так:
2) Таблица "Успеваемость"
поле IDVypusknik - integer - служит для связи с таблицей выпускников
поле Disciples - строковое - здесь хранятся коды всех изученных дисциплин через запятую (или другой разделитель) - примерно так ":1:2:10:25:" (т.е. студентом были изучены диспциплины с кодами 1, 2, 10, 25)
поле Balls - строковое - соответственно здесь хранятся полученные оценки по предметам

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

Какой вариант на ваш взгляд практичнее?
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34227738
.gc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.gc
Гость
вариант №1
только имя поля лучше Balls - small, average, big, huge :)
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34227791
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nike85... даст существенный выигрыш в количестве записей...
А для чего он, этот "существенный" выигрыш?
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34227963
Nike85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to .gc
а почему второй не устраивает?
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34227988
Nike85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sgt.Pepper Nike85... даст существенный выигрыш в количестве записей...
А для чего он, этот "существенный" выигрыш?
Как для чего? Есть же разница открывать пустую таблицу, или таблицу, где записей порядка 100 тысяч? Ведь производительность работы с таблицей (выборка, поиск, фильтрация) зависит и от числа записей в ней. Другое дело, что для обработки каждой записи во втором случае придется тратить дополнительное время проца. Вот я и хочу узнать - в каком случае затраты времени меньше.
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34228054
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне вот интересно как будет выглядеть и сколько будет работать запрос во 2ом случае, если надо найти средний бал всех выпускников по математике?
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34228083
.gc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.gc
Гость
0. Некоторые могут увидеть нарушение NF1 в варианте#2 :)

1. как вы во втором варианте будете выполнять запросы типа:
Код: plaintext
1.
2.
3.
4.
select students.name, avg(final_grades.value) as avg_grade
from students join final_grades on (students.stud_id = final_grades.stud_id)
where extract(year from students.graduation_date) =  2006  and students.speciality_code = '7.080202'
having avg(final_grades.value) >=  4 . 75 
???

2. Скорее всего, типичный запрос не потребует всех сотен тыс. записей, + индексы на foreign keys могут значительно уменьшить время запросов. Единственный случай, когда могут потребоваться все записи - печать приложений к диплому перед выпуском - но тут время печати значительно превысит время выборки :)
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34228148
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.gc0. Некоторые могут увидеть нарушение NF1 в варианте#2 :)
Как бы у автора топика не возникли бы вопросы про 1НФ, а-то я волноваться начинаю :-)). Короче - вариант №1 канает :-).
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34232810
Nike85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rin@t .gc0. Некоторые могут увидеть нарушение NF1 в варианте#2 :)
Как бы у автора топика не возникли бы вопросы про 1НФ, а-то я волноваться начинаю :-)). Короче - вариант №1 канает :-).
Да, первая нормальная форма, это конечно, круто, но Ваши сомнения, Ринат, могут отдохнуть в другом месте, ведь здесь приветствуются лишь предложения, а не сомнения
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34232854
Nike85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
basА мне вот интересно как будет выглядеть и сколько будет работать запрос во 2ом случае, если надо найти средний бал всех выпускников по математике?
Ага, понял, bas . Приче это для меня существенно :)) (первый вариант рулит А может еще есть варианты для агрегации нескольких записей в данном случае???
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34232896
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да пожалуйста.
авторКоличество дисциплин для одного выпускника колеблется в пределах 40-60 штук. а количество столбцов в таблице - до 1000. Хватает на каждую дисциплину.
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34233014
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelRДа пожалуйста.
авторКоличество дисциплин для одного выпускника колеблется в пределах 40-60 штук. а количество столбцов в таблице - до 1000. Хватает на каждую дисциплину.
Угу а поскольку редко приходится считать средний бал по физике+медицине то и запросы попроще будут да и скорость повыше, только вот средний бал по студенту считать не очень удобно ;)
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34234396
bcbv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nike85Здравствуйте и с наступающим!

поле Ball - integer - соответственно здесь хранится полученная оценка



Боллз - это в данном контексте переводится скорее как "яйца". А оценка будет Mark.
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34234507
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nike85
Как для чего? Есть же разница открывать пустую таблицу, или таблицу, где записей порядка 100 тысяч? Ведь производительность работы с таблицей (выборка, поиск, фильтрация) зависит и от числа записей в ней. Другое дело, что для обработки каждой записи во втором случае придется тратить дополнительное время проца. Вот я и хочу узнать - в каком случае затраты времени меньше.
Ну и для чего страдать икснёй?
Вся эта сотня тысяч записей будет занимать объём порядка одного мегабайта, на чём база вертится, на XT с 640кб памяти? Ради чего эта экономия на спичках, чтобы любые сколько-нибудь сложные запросы проводить перректально через курсор?
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34263414
Nike85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ModelRДа пожалуйста.
авторКоличество дисциплин для одного выпускника колеблется в пределах 40-60 штук. а количество столбцов в таблице - до 1000. Хватает на каждую дисциплину.

Подскажи, пожалуйста, ModelR, а как тогда должна выглядеть структура таблицы Оценки по дисциплинам - если к изучаемым дисциплинам могут добавляться новые.
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34264598
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение годится, если на период эксплуатации системы число предметов плюс число других полей в ОЦЕНКИ заведомо меньше лимита числа колонок .

ОЦЕНКИ (Студент, Семестр, ОценкаПредм1, ...., ОценкаПредмN)
ПРЕДМЕТЫ (Наименование, Номер_позиции_ОЦЕНКИ,...) -- метаданные, компетенция администатрора.

Запросы динамические, типа оценки по премету 'Физика'

sql_txt= 'Select ОценкаПредм' <конкатенация> (Select Номер_позиции_ОЦЕНКИ from ПРЕДМЕТЫ
where Наименование = 'Физика') <конкатенация> ' from ОЦЕНКИ'

Формы ввода также строятся динамически по метаданным.
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34267732
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ModelR
А какой смысл-то в этом? Динамические запросы, изменение структуры для добавления предмета...
Выигрыш-то в чем?
...
Рейтинг: 0 / 0
структура таблицы, позволяющая объединить несколько записей??
    #34268699
Nike85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To ModelR
Спасибо за дельные советы. Наверное, все ж таки лучше организовать структуру таблицы Оценки так:
код_выпускника, код_предмета, полученная_оценка.

А то если для объединять все оценки по предметам в одну запись, то получится либо зашифрованное поле, либо куча "простаивающих полей" (типа студент не изучал физику, но поле для "физика" в его записи то существует). Спасибо за критику и предложения.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / структура таблицы, позволяющая объединить несколько записей??
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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