|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
Здравствуйте, форумчане. Проектирую базу данных для приложения по учёту абитуриентов, опыт у меня исключительно учебный, так что хочу, чтобы знающие люди взглянули и оценили то, что я набросал. В чём суть, приложение должно должно хранить данные об абитуриентах, их паспортные данные и данные из их документов об образовании, на основе полученных данных приложение должно составлять список поступивших по следующему правилу: 1) Первоначально происходит сортировка по убыванию среднего балла аттестата 2) Если у кого-то средние баллы равны, то происходит сортировка по суммарному баллу профильных предметов 3) Если суммарные баллы равны, то сортировка происходит по убыванию балла за каждый профильный предмет в зависимости от их приоритета 4) Если баллы за каждый профильный предмет равны, то дальше учитывается наличие договора о целевом обучении, личные достижения, участие в олимпиадах Собственно вопросы следующие 1) Можно ли реализовать такую логику на стороне СУБД, чтобы приложение получало уже готовый список (Использую MS SQL Server 2017) 2) Какие есть замечания/предложения по составленной модели данных? Есть какие-либо ошибки или может базу можно спроектировать лучше? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2020, 21:29 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
Primum_Princeps приложение должно должно хранить данные об абитуриентах, их паспортные данные ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2020, 22:36 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
Primum_Princeps, Так, на вскидку... - Один паспорт может быть у нескольких Абитуриентов ? - Один Аттестат тоже могут выдать на двоих или троих ? По идее поля таблиц Паспорт и Аттестат нужно тупо перенести в таблицу Абитуриент и всё, ибо эти документы являются идентификаторами Абитуриента... Ну если только еще и наличие загран паспортов нужно учитывать, то тогда связь к Паспорт будет наоборот, первичный ключ ID абитуриента... Единственный плюс схема на русском языке, и не нужно дополнительное описание, потом в реализации нужно не забыть переименовать всё в инглиш... А то тут многие нарисуют хрен знает что, да еще перевод сделают хрен знает какой, да еще описания нет и спрашивают типа - Ну как ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2020, 22:44 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
Ну и если скрестить Абитуриента с Паспортом и Аттестатом, то Оценки Аттестата трансформируется в Оценки Абитуриента ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2020, 22:48 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
Primum_Princeps, названия сущностей сделай в ед.числе: "Олимпиад А ", а не "Олимпиад Ы " ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2020, 22:48 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
ъъъъъ названия сущностей сделай в ед.числе: "Олимпиад А ", а не "Олимпиад Ы " и в конечном варианте переведи на инглиш... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2020, 22:49 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
ъъъъъ "Тебя посодют" - (с). Вряд ли в моём шедевре информационного искусства кто-нибудь станет хранить настоящие данные (особенно я). vmag По идее поля таблиц Паспорт и Аттестат нужно тупо перенести в таблицу Абитуриент и всё, ибо эти документы являются идентификаторами Абитуриента А что насчёт сортировки? Насколько возможно реализовать выдачу списка отсортированного таким образом из самой базы данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2020, 23:18 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
Primum_Princeps А что насчёт сортировки? Насколько возможно реализовать выдачу списка отсортированного таким образом из самой базы данных? MS SQL Server довольно приличная система, всё зависит от самой БД и кривизны рук... Primum_Princeps 1) Первоначально происходит сортировка по убыванию среднего балла аттестата Как будешь определять это оценка из аттестата или это оценка по профильному предмету? По наличию/отсутствию записей в Профильных предметах ? А если данные не полностью введены и по аттестату и профилям ? Соответственно сортировки 2 и 3 тоже в этом отношении весьма не однозначны, когда тип и качество данных определяется наличием/отсутствием других данных - слабоватое место вообще-то... При наличии достижений учет участия в олимпиадах без результата - лишний, чел мог участвовать во всех абсолютно олимпиадах и занимать там всегда почетное последнее место, и что... ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2020, 00:52 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
vmag Как будешь определять это оценка из аттестата или это оценка по профильному предмету? Оценки из аттестата хранятся в таблице с оценками абитуриента, а в другой таблице хранится информация о профиле и приоритете предмета (Отдельная таблица с профилями убрана за ненадобностью, всё будет хранить "Приоритет предмета") vmag При наличии достижений учет участия в олимпиадах без результата - лишний, чел мог участвовать во всех абсолютно олимпиадах и занимать там всегда почетное последнее место, и что... ? Вот насчёт олимпиад мне не совсем понятно, как лучше сделать. По идее информация о них должна как-то храниться в индивидуальных достижениях, так как один из трех видов индивидуальных достижений это как раз участие в олимпиаде, но учитываются только олимпиады из определённого перечня. Учитывается только наличие статуса призёра без учёта количества ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2020, 16:33 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
Primum_Princeps Оценки из аттестата хранятся в таблице с оценками абитуриента, а в другой таблице хранится информация о профиле и приоритете предмета Так-то вроде логично - для каждой специальности свои приоритеты по важности предметов... Primum_Princeps от насчёт олимпиад мне не совсем понятно, как лучше сделать. По идее информация о них должна как-то храниться в индивидуальных достижениях Это не повод, не знаешь как пристроить к телеге 5 колесо, держи как запаску (пока в голове)... Ну или в Олимпиада добавь поле "Занял место" с возможными значениями 1,2,3,...,100, - можно вычислить активных у частников по count - по min(sum()) можно прикинуть кто продуктивен - но вот как это скрестить в анализе ? Один участвовал 1 раз и занял 2 место, может оказаться круче того кто 3 раза занял 1 место... А еще у тебя Олимпиады никак не коррелируются с Индивидуальными Достижениями логически... Я бы выкинул нафик эти Индивидуальные Достижения , а Словарь Достижений в виде классификатора привязал к Абитуриенту, тогда Абитуриенту можно присвоить Бакалавр, Аспирант, Кандидат и т.д. А после олимпиад, можно было бы автоматически вычислять призеров (это те кто больше занял 1-3 мест на олимпиадах). Ну если короче, то - выкинуть Индивидуальные Достижения и Воткнуть в Олимпиада поле Занял место - Достижения привязать к Абитуриенту ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2020, 19:42 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
vmag Ну если короче, то - выкинуть Индивидуальные Достижения и Воткнуть в Олимпиада поле Занял место - Достижения привязать к Абитуриенту Воткнуть в Олимпиада поле Занял место - это точно, иначе Олимпиада не имеет особого смысла... Если достижения это не карьерная лестница по нарастающей и достижений может быть много, то Индивидуальные Достижения можно оставить как есть ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2020, 19:59 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
Primum_Princeps, Так, пробегая еще раз мимо, могу дать один совет, - если таблица (кроме своего первичного ключа) содержит только вторичные ключи других таблиц, скорее всего это избыточная таблица и она не нужна... Ну это как просто голое сочетание Петя + Таня, ибо не понятно кто они (супруги, родственники, коллеги,...) с какого момента (на какой период), на основании чего (документ), ну и т.д. Это правило сработало в Вашей схеме два раза: 1. Таблица Олимпиады без результата Абитуриента и даты её Проведения - ни о чем... ( дату (срок С и По) проведения олимпиады лучше хранить в Словарь олимпиад ) 2. Таблица Профильные предметы из второй картинки - Вы ее сами и убрали, по той же причине - в ней кроме ключей ничего нет... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2020, 23:14 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
Primum_Princeps Что скажете? ну от Предмета до Абитуриента (с учетом того что один предмет могут изучать несколько специальностей и некоторые специальности можно объединить в какие-то группы), ещё как-то понятно, за исключением одного - абитуриент реально может претендовать на более чем одну специальность в вузе ? Если нет - то этот паттерн в виде Специальности абитуриента - явно не уместен, достаточно в абитуриенте ссылки на специальность, если да, - то вам наверное виднее... С олимпиадами - туман... от абитуриента до словаря достижений и словаря олимпиад не смог уловить ни одну мысль, между ними одни избыточные таблицы без параметров vmag если таблица (кроме своего первичного ключа) содержит только вторичные ключи других таблиц, скорее всего это избыточная таблица и она не нужна... Попробуйте мысленно внести в свою БД результаты одной олимпиады, допустим Иванов занял 1 место, а Петров 2-е, во что это выльется ? Связь от Индивидуальные Достижения до Выигранные олимпиады это нечто... по сути от никуда в никуда... одна ненужная таблица является главной для другой не нужной таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2020, 16:58 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
Primum_Princeps, У пассажираабитуриента может не быть паспорта (хотя бы временно, но, вообще говоря, даже и постоянно). Т.ч. паспорта лучше в отдельную сущность с отношением "1 - 0,1". ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2020, 18:36 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
fkthat У пассажираабитуриента может не быть паспорта (хотя бы временно, но, вообще говоря, даже и постоянно). Т.ч. паспорта лучше в отдельную сущность с отношением "1 - 0,1". вместо серии или номера просто написать "НЕТ", если поле совсем пустое - значит не ввели еще, ради нескольких полей заводить таблицу на 1-1, а потом обрабатывать в запросах null ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2020, 21:13 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
Primum_Princeps, В индивидуальных достижениях сделать ссылку на олимпиаду, ссылку на инд. достижение, дату и связать со словарями. Получится 2 ключа один из которых будет пустой. Связываться это будет с двумя словарями, итого 3 таблицы: достижения, словарь олимпиад, словарь инд. достижений. У к рупнённая группа специальностей. Так, в целом сойдёт. А какие схемы делает местный Стасян, так всё вообще не плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 05:55 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
vmag fkthat У пассажираабитуриента может не быть паспорта (хотя бы временно, но, вообще говоря, даже и постоянно). Т.ч. паспорта лучше в отдельную сущность с отношением "1 - 0,1". вместо серии или номера просто написать "НЕТ", если поле совсем пустое - значит не ввели еще, ради нескольких полей заводить таблицу на 1-1, а потом обрабатывать в запросах null ? А если у него вместо пасопорта какое-нибудь удостоверение беженца или лица без гражданства, то что писать? Я бы вообще завел отдельную абстрактную сущность "Документ" привязал бы это к персонажу как один ко многим и туда складывал бы все его возможные документы (паспоррт, аттестат, да хоть водительское удостоверение и т.п.). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 09:49 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
vmag вместо серии или номера просто написать "НЕТ" Достаточно, чтобы уволить автора идеи за полное служебное несоответствие. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 12:27 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
softwarer, Испугался, аж колени дрожат, по существу лучше подскажи или хоть мнение в общем, хочешь счетчик до 100 т. накрутить? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 12:33 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
softwarer vmag вместо серии или номера просто написать "НЕТ" Достаточно, чтобы уволить автора идеи за полное служебное несоответствие. Да, это пипец. Что самое страшное, что с такими поделиями потом работать кому-то приходится. Это уже какая-то даже не трехзначная а четырехзначная логика выходит - "значение", "null", или "НЕТ". Остается еще добавить "ДА". Серия паспорта: "ДА" ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 13:32 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
fkthat Что самое страшное, что с такими поделиями потом работать кому-то приходится. Особенно весело, что эти данные потом куда-то заливают и анализируют. Например, один из моих коллег, когда работал с информацией о пересекающих границу РФ, выловил фамилию Кудайбердыев(умер) . ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 13:39 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
softwarerОсобенно весело, что эти данные потом куда-то заливают и анализируют. Но чаще всего они никому не нужны и на их заполнение забивают болт. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 13:48 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Но чаще всего они никому не нужны и на их заполнение забивают болт. Вот с такими не встречался. Возможно, конечно, потому, что они никому не нужны :) По моим наблюдениям, основная причина проблем - криво спроектированная структура данных, в которую не лезут реальные потребности. И тогда начинают появляться "лайфхаки". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 13:52 |
|
Помогите с проектированием БД
|
|||
---|---|---|---|
#18+
vmag softwarer, Испугался, аж колени дрожат, по существу лучше подскажи или хоть мнение в общем, хочешь счетчик до 100 т. накрутить? Я же выше писал, стандартное решение это отношение "1 - 0,1", например: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 13:52 |
|
|
start [/forum/topic.php?fid=32&msg=39956270&tid=1539853]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
21ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 135ms |
0 / 0 |