Это приемлемый дизайн базы данных? - PullRequest
0 голосов
/ 17 марта 2011

Мое чувство паука покалывает, но я думаю об этом уже 2 часа, и мне хотелось бы получить еще несколько отзывов от улья.

Я создаю приложение для школы.Он должен работать со студентами, учителями, курсами, почетными ролями, оценками - работами.

Мне было интересно, как справиться со сменой лет после каждого года.

  • Студенты продвигаютсякласс (или нет).
  • Учителя назначаются в разные классы в качестве учителя в классе.
  • Оценки сохраняются в течение года.

Также естьвопрос аудита.Мне нужен простой способ подтянуть записи прошлого или предыдущего года.Посмотрите, какой учитель дал какой курс, в каком классе и в каком году.

У меня проблема в том, как справиться с этим.

Я думал о том, чтобы создать новую чистую базу данных для каждого года по мере их поступления.Поэтому в конце этого года я пошел в школу и создал для них новую базу данных с именем FooSchool2012 и программно позволил конечным пользователям изменять базу данных, которую они хотят использовать, через строку подключения.

Поскольку яЯ использую ORM, это только вопрос изменения строки подключения, поскольку базы данных одинаковы.

Но это пахнет мне плохим дизайном и дерьмовой инженерией.

Обычно у меня все в порядке, так что, надеюсь, вы, ребята, можете дать мне знать о некоторых альтернативах, как с этим справиться.

Ответы [ 4 ]

4 голосов
/ 17 марта 2011

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

Нет, не совсем хороший дизайн.

Распространена историческая информация в базы данных отчетов / хранилищ данных.Но предлагаемая вами схема напоминает старые методологии VSAM с плоскими файлами для мэйнфреймов.Я бы использовал реляционные базы данных так, как они предназначались для использования.

2 голосов
/ 17 марта 2011

Я уверен, что ваше решение можно было бы сделать работоспособным, но оно кажется немного излишне сложным. Не могли бы вы сделать то же самое в одной базе данных, ссылаясь на учебный год? Вы можете подумать о том, какие объекты имеют смысл иметь «эффективные даты» (т. Е. Время начала и окончания). Например, учитель 3-го класса может измениться в середине года, но вы можете справиться с этим с помощью вступительных дат.

1 голос
/ 19 марта 2011

Я думал создать новый чистый база данных за каждый год

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

Это наблюдение, а не критика. Вам просто нужно изучить гораздо больше основ, прежде чем приступать к такому проекту. Вы просто расстроитесь, и школа пострадает.

0 голосов
/ 17 марта 2011

Вам нужно потратить МНОГО времени на разработку базы данных.Подумайте о техническом обслуживании в долгосрочной перспективе, оно должно быть максимально простым.Лучший способ - создать реляционную базу данных, исследовательский мост, валидацию и базовые таблицы.Чтобы ответить на ваш вопрос, я бы не стал составлять таблицу на каждый год.Наилучшим способом является сопоставление данных об успеваемости учащихся с определенным уникальным идентификатором, представляющим конкретный идентификатор курса этого ученика.

Я бы подумал о создании таблицы для каждого из существительных:

преподаватель - PKinstructorID, instructorName .. (любая другая информация об 1: 1)

Студент - PK studentID, StudentName .. (любая другая информация об 1: 1)

Course - PK CourseID, CourseName,CourseDescription .. (любая другая информация о курсе 1: 1)

• Учителя назначаются в разные классы в качестве учителя в классе.

в таблице инструкторов 1: 1 вы можете иметь столбец с именем HomeroomGradeа затем вы

обновите этот столбец с текущей оценкой.Если вы хотите сохранить историю класса

, вы можете сделать таблицу инструкторов составным ключом с другим столбцом, увеличивающим

для текущей записи.

• Учащиесяподнимите оценку (или не делайте).

Вам понадобится еще одна таблица, показывающая отношение студентов к уникальным курсам

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

PK InstructorToCourseID

InstructorID - FK

CourseID - FK

Год - FK

затем еще одна таблицаотображение уникального курса для этого студента с оценкой ..

PK InstructorToCourseID FK из предыдущей таблицы

PK StudentID - FK из информационной таблицы студента

Grade

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

...