Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос по теории для практиков  [new]
DmitryJ
Member

Откуда:
Сообщений: 32
Вобщем создается баз данных для вуза, хотя вопрос не касается конкретной базы данных. Связка SQL Server2005+Access (может потом будут другие клиенты). Естественно должны храниться данных об абитуре, студерах, аспирантах, преподах и т.п.
Собственно вопрос: таблицы нужно делать разные для каждой категории и потом перемещать записи? или сделать одну таблицу, а из не представления, через них приемная комиссия вбивает абитуру, затем записи присваивается статус "студет" и они обрабатываются деканатами, затем "закончил" и т.п., но в этом случае наверно через пару лет таблица будет очень боольшой... подскажите как правильно :)
29 май 09, 18:54    [7246297]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по теории для практиков  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33358
Блог
Можно и так, и так, но пока вам проще будет разделить сущности
29 май 09, 19:13    [7246351]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по теории для практиков  [new]
Mayh
Guest
Критик
Можно и так, и так, но пока вам проще будет разделить сущности


Не слушайте Критика, он не в теме :). Сделайте всё в одной таблице, много записей не будет. в год - тысяч 10 если ВУЗ большой, иначе - 3-5к.
29 май 09, 20:04    [7246464]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по теории для практиков  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33358
Блог
Mayh,

-)
Можно и в одной, но тогда вам логику придетсяучитывать более сложную, типа: этого человека(студента) связываем с его оценками, а этого(преподавателя) - нет.

Все плюсы и минусы можете найти в подфоруме "Проектирование БД" в темах про разделять/не разделять ли физических и юридических лиц
29 май 09, 20:11    [7246487]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по теории для практиков  [new]
урка1
Member

Откуда: Москва, Кремль
Сообщений: 761
Не слушайте Mayh, он не в теме :).

Поля у абитуриентов и студентов совершенно разные. Табла абитуриентов связывается с таблой вступительных экзаменов. А табла студенов (например) с таблой приказов на отчисление за неуспеваемость.

А количество записей в табле студентов - 3 тысячи или 30 тысяч - это вообще не критерий для опредения количества таблиц.


всех зачистим и замочим, а кто спрячется - персонального доктора вышлем
29 май 09, 20:15    [7246503]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по теории для практиков  [new]
DmitryJ
Member

Откуда:
Сообщений: 32
Можно и так, и так, но пока вам проще будет разделить сущности

всетаки хотелось бы заложить правильный фундамент БД, чтобы на определенном этапе не переделывать...
Сделайте всё в одной таблице, много записей не будет

здесь тенденция такая - допустим в год вводятся 1000-5000 абитуриентов, из них допустим половина становится студентами (данные о непоступивших не удаляем, окончивших не удаляем), умножаем на 6 курсов = 18000 записей, каждый год допустим прибавляется еще 3000, тоесть через 5 лет будет больше 30000 записей, но это мелочи, меня пугает что у каждого студента есть оценки, примерно 100 за время обучения, тоесть в связанной таблице ОЦЕНКИ будет 30.000*100=3.000.000 - не тяжело ли будет SQL Server обрабатывать это???
того человека(студента) связываем с его оценками, а этого(преподавателя) - нет.

преподаватели однозначно в другой, речь идет о связке "абитуриент-студент-вупускник", хотя понятно что у Студента будут связи с ОЦЕНКАМИ, ПРИКАЗАМИ, а у Выпускника с ДИПЛОМАМИ и т.п.
Поля у абитуриентов и студентов совершенно разные

в том то и дело что почти одинаковые... может правильно было бы сделать таблицу ЛЮДИ в которой простые данные о человеке, а каждому человеку сопоставить записи из таблицы СТУДЕНТЫ?
30 май 09, 13:43    [7247546]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по теории для практиков  [new]
iljy
Guest
DmitryJ

Сделайте всё в одной таблице, много записей не будет

здесь тенденция такая - допустим в год вводятся 1000-5000 абитуриентов, из них допустим половина становится студентами (данные о непоступивших не удаляем, окончивших не удаляем), умножаем на 6 курсов = 18000 записей, каждый год допустим прибавляется еще 3000, тоесть через 5 лет будет больше 30000 записей, но это мелочи, меня пугает что у каждого студента есть оценки, примерно 100 за время обучения, тоесть в связанной таблице ОЦЕНКИ будет 30.000*100=3.000.000 - не тяжело ли будет SQL Server обрабатывать это???

не переживайте, не будет:) поверьте, 3 млн записей в базе - это в сущности копейки. главное - грамотно их проиндексировать. Для этого создайте тестовую базу, набейте ее даными, похожими на настоящие (т.е. не надо делать 3млн оценок, привязанных к одному студенту, сделайте 30000 * 100), и погоняйте наиболее часто выполняющися запросы. у вас база меняется редко и небольшими порциями, так что торможение на вставке-изменении из-за индексов будет не критично.

того человека(студента) связываем с его оценками, а этого(преподавателя) - нет.

преподаватели однозначно в другой, речь идет о связке "абитуриент-студент-вупускник", хотя понятно что у Студента будут связи с ОЦЕНКАМИ, ПРИКАЗАМИ, а у Выпускника с ДИПЛОМАМИ и т.п.
Поля у абитуриентов и студентов совершенно разные

в том то и дело что почти одинаковые... может правильно было бы сделать таблицу ЛЮДИ в которой простые данные о человеке, а каждому человеку сопоставить записи из таблицы СТУДЕНТЫ?

вы подумайте вот о чем: вы ведь после выпуска инфу о студентах не удаляете, так? в смысле оценки и прочее. А эта инфа явно имеет привязку по внешнему ключу. Соответственно выкинуть запись из таблицы вы не сможете даже когда студент станет выпускником. соответственно таблица студенты-выпускники явно общая. а абитурьенты - тут смотрите по задаче. надо ли вам хранить инфу о его вступительных оценках даже после его поступления? как долго вы храните инфу для непоступивших и т.п. возможно будет грамотней сделать одну таблицу, но секционированную по типу записи.
30 май 09, 14:22    [7247591]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по теории для практиков  [new]
iljy
Guest
В продолжение темы - пришла в голову еще одна мысль. люди имеют свойство иногда менять фамилии например, и если делать скажем несколько таблиц, ссылающихся друг на друга - будет тяжко. можно сделать общую таблицу Люди, в которой хранить общую инфу, и отдельные таблицы - Абитурьенты, Студенты и т.п., вида IDСтудента, IDЧеловека, инфа о студенте. Получается разбиение логики, допонительная инфа привязана к конкретной таблице (оценки - к студенту, вступительные - к выпускнику), а всю инфу о человеке за все время его обучения можно выцепить, воспользовавшись связью IDЧеловека.
30 май 09, 14:39    [7247620]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по теории для практиков  [new]
RAndrey
Member

Откуда:
Сообщений: 324

в том то и дело что почти одинаковые... может правильно было бы сделать таблицу ЛЮДИ в которой простые данные о человеке, а каждому человеку сопоставить записи из таблицы СТУДЕНТЫ?


Насколько помню, 3-я нормальная форма именно этого и требует.
30 май 09, 16:19    [7247764]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по теории для практиков  [new]
DmitryJ
Member

Откуда:
Сообщений: 32
С таблицей ЛЮДИ определились - нужна и точка!
Таблица Студенты-абитуриенты-выпускиники будет общей, можно в дальнейшем сделать механизм экспорта выпускников в другую базу с такими же таблицами что и в текущей, будет типа архив.
Может есть еще замечания у гуру?
1 июн 09, 11:54    [7250612]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по теории для практиков  [new]
DmitryJ
Member

Откуда:
Сообщений: 32
И еще такой впросик - в каких случаях нужно создавать на сервере отдельную базу данных? Ведь если предметная область одна, значит все в ней связано и все получается должно быть в одной базе даннных или я ошибаюсь?
2 июн 09, 12:06    [7255116]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по теории для практиков  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
DmitryJ
И еще такой впросик - в каких случаях нужно создавать на сервере отдельную базу данных? Ведь если предметная область одна, значит все в ней связано и все получается должно быть в одной базе даннных или я ошибаюсь?

зависит от.
У меня, к примеру, 4 базы на одну предметную область.
Можно было бы и 5, но лень.
2 июн 09, 12:13    [7255145]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по теории для практиков  [new]
vino
Member

Откуда:
Сообщений: 1191
DmitryJ
...в связанной таблице ОЦЕНКИ будет 30.000*100=3.000.000 - не тяжело ли будет SQL Server обрабатывать это???
...
3 млн. записей об оценках - это совсем не большая таблица, разве только если Вы, нарушая нормализацию, не забьете ее дополнительными сущностями
Насчет таблицы ЛЮДИ - правильное направление. Записей там будет не так уж и много, а логика историзма при изменении атрибутов реализуется один раз.
2 июн 09, 15:44    [7256602]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить