Расчет заработной платы: База данных-1

Содержание

Слайд 2

0. Эпиграф
Часто у экспертов данных больше,
чем здравого смысла.
Колин Пауэлл

0. Эпиграф Часто у экспертов данных больше, чем здравого смысла. Колин Пауэлл

Слайд 3

1. Вопросы реализации базы данных

Теперь, когда большая часть приложения проанализирована, спроектирована и

1. Вопросы реализации базы данных Теперь, когда большая часть приложения проанализирована, спроектирована
реализована, можно вернуться к вопросу о базе данных.
Ясно, что класс БазаДанных (PayrollDatabase) инкапсулирует идею постоянного хранения. Объекты, находящиеся в БазеДанных (PayrollDatabase), очевидно, не должны уничтожаться после завершения работы приложения. Как это реализовать?
Есть несколько вариантов.

Слайд 4

2. Вопросы реализации базы данных

Можно реализовать БазуДанных (PayrollDatabase), воспользовавшись какой-нибудь объектно-ориентированной системой

2. Вопросы реализации базы данных Можно реализовать БазуДанных (PayrollDatabase), воспользовавшись какой-нибудь объектно-ориентированной
управления базами данных (ОО-СУБД). Это дало бы возможность помещать объекты на постоянное хранение в базу. Нам как проектировщикам не пришлось бы прилагать особых усилий, потому что ООСУБД почти ничего не добавила бы к дизайну.
Одно из серьезных достоинств ООСУБД заключается в том, что они мало влияют на объектную модель приложения. С точки зрения дизайна, базы данных как бы и не существует.

Слайд 5

3. Вопросы реализации базы данных

Другой вариант – воспользоваться для хранения данных плоскими

3. Вопросы реализации базы данных Другой вариант – воспользоваться для хранения данных
файлами. На этапе инициализации объект БазаДанных (PayrollDatabase) мог бы прочитать файл и создать необходимые объекты в памяти. А в конце работы он просто записал бы новую версию файла.
Конечно, это решение не подойдет, если в компании сотни или тысячи работников или если необходим оперативный одновременный доступ к базе данных о работниках.
Однако для небольшой компании его может оказаться достаточно, и уж точно оно годится как механизм тестирования всех остальных классов приложения без инвестирования в большую СУБД.

Слайд 6

4. Вопросы реализации базы данных

Третий вариант – подключить к объекту БазаДанных (PayrollDatabase)

4. Вопросы реализации базы данных Третий вариант – подключить к объекту БазаДанных
реляционную СУБД (РСУБД). Тогда реализация БазаДанных (PayrollDatabase) свелась бы к выполнению запросов к СУБД для временного создания необходимых объектов в памяти.
Важно, что любой из этих подходов будет работать. Мы спроектировали приложение так, что оно не знает и не интересуется механизмом реализации базы данных. С точки зрения приложения, база данных – это просто средство для управления постоянным хранением.

Слайд 7

5. Вопросы реализации базы данных

Обычно базы данных не следует рассматривать как решающий

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

Слайд 8

6. Вопросы реализации базы данных

На множестве предыдущих занятий мы реализовали всю бизнес-логику

6. Вопросы реализации базы данных На множестве предыдущих занятий мы реализовали всю
системы расчета зарплаты. В состав реализации входит и класс БазаДанных (PayrollDatabase), предназначенный для хранения необходимых данных в памяти.
В тот момент его было вполне достаточно.
Но ясно, что системе необходимо какое-то более долговременное хранилище данных.
Рассмотрим, как обеспечить сохранение данных в реляционной базе.

Слайд 9

7. Выбор СУБД

Выбор технологии баз данных обычно диктуется скорее политическими, нежели техническими

7. Выбор СУБД Выбор технологии баз данных обычно диктуется скорее политическими, нежели
причинами. Компании-производители баз данных и платформ немало постарались, чтобы убедить рынок в критической важности такого выбора. Лояльность и преданность конкретному поставщику формируется по причинам, больше относящимся к человеческим отношениям, чем к технической целесообразности.
Поэтому не следует придавать слишком большого значения нашему выбору Microsoft SQL Server в качестве СУБД для хранения данных приложения.

Слайд 10

8. Схема БД

На следующем слайде показана схема базы данных, которой мы будем

8. Схема БД На следующем слайде показана схема базы данных, которой мы
далее пользоваться.
В центре находится таблица Работник (Employee). Здесь хранятся данные о работниках, а также строковые константы, определяющие график выплат ТипГрафика (ScheduleType), метод платежа ТипМетода (PaymentMethodType) и тарификацию ТипВыплат (PaymentClassifica-tion).

Слайд 11

9. Схема БД

Сами данные, относящиеся к тарификации, хранятся в таблицах ВыплатаЧас (HourlyClassification),

9. Схема БД Сами данные, относящиеся к тарификации, хранятся в таблицах ВыплатаЧас
ВыплатаОклад (SalariedClassification) и ВыплатаКомис (CommissionedClassification).
Ссылка на соответствующую запись таблицы Работник (Employee) находится в столбце РабНом (EmpId). Для этого столбца определено ограничение, гарантирующее, что в таблице Работник (Employee) существует запись с данным значением РабНом (EmpId).

Слайд 12

10. Схема БД

В таблицах DirectDepositAccount () и PaycheckAddress () хранятся данные, относящиеся

10. Схема БД В таблицах DirectDepositAccount () и PaycheckAddress () хранятся данные,
к соответствующему методу (перечисление на банковский счет или отправка чека почтой); на столбец РабНом (EmpId) наложено аналогичное ограничение.
Таблицы SalesReceipt (СправкиПродаж) и TimeCard (КартыТабУчета) не нуждаются в пояснениях.
В таблице Affiliation хранятся данные о членстве в профсоюзе, она связана с таблицей Employee через таблицу EmpoyeeAffiliation.

Слайд 13

11. Схема БД

11. Схема БД

Слайд 14

12. Создание БД

В Обозревателе решений выделите ПРОЕКТ Payroll_FIO (иначе база добавится в

12. Создание БД В Обозревателе решений выделите ПРОЕКТ Payroll_FIO (иначе база добавится
текущую папку!)
В главном меню выберите Проект -> Добавление нового элемента.
Откроется диалоговое окно Добавить новый элемент, в котором можно добавлять элементы, допустимые в проекте Windows Forms.
В списке шаблонов элементов прокрутите вниз до тех пор, пока не появится База данных, основанная на службах, и выберите его.
Назовите базу данных PayrollDB.mdf и нажмите кнопку Добавить.

Слайд 15

13. Добавление БД в проект

13. Добавление БД в проект

Слайд 16

14. Создание БД

Если окно "Источники данных" еще не открыто, нажмите клавиши SHIFT+ALT+D

14. Создание БД Если окно "Источники данных" еще не открыто, нажмите клавиши
или выберите в строке меню Вид -> Другие окна -> Источники данных.
В окне "Источники данных" щелкните ссылку Добавить новый источник данных.
В окне Мастер настройки источника данных нажмите кнопку Далее четыре раза, чтобы принять параметры по умолчанию, затем кнопку Готово. ПРОЧИТАЙТЕ С ЧЕМ СОГЛАШАЕТЕСЬ!!! Обратите внимание, что VS сама находит созданную вами БД, сама к ней подключается.
В окне свойств базы данных отображается строка подключения и расположение основного MDF-файла базы данных.

Слайд 17

15. Создание таблиц

Создайте таблицы в соответствии со схемой данных. (см. слайды далее!)
Не

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

Слайд 18

16. Создание таблицы Работник (Employee)

Чтобы создать таблицу Работник (Employee)
В области Обозреватель серверов

16. Создание таблицы Работник (Employee) Чтобы создать таблицу Работник (Employee) В области
разверните узел Подключения данных, а затем узел PayrollDB.mdf.
Если обозреватель еще не открыт, выберите в строке меню Вид -> Обозреватель серверов.
Откройте контекстное меню для раздела Таблицы, выберите Добавить новую таблицу.
Будет открыт Конструктор таблиц, отобразится сетка с одной строкой по умолчанию, которая представляет один столбец в создаваемой таблице. Путем добавления строк в сетку будут добавлены столбцы в таблицу.

Слайд 19

17. Создание таблицы Работник (Employee)

В сетке добавьте строку для каждой из следующих

17. Создание таблицы Работник (Employee) В сетке добавьте строку для каждой из
записей, указав имя столбца, тип данных и допустимы значения null:

Слайд 20

18. Создание таблицы Работник (Employee)

Откройте контекстное меню для столбца EmpID и выберите

18. Создание таблицы Работник (Employee) Откройте контекстное меню для столбца EmpID и
Задать первичный ключ. (НЕ ВЫБЕРИТЕ случайно УДАЛИТЬ первичный ключ!)
Назовите таблицу “Employee" путем обновления первой строки в области скриптов, как показано ниже:

Слайд 21

19. Создание таблицы Работник (Employee)

В левом верхнем углу конструктора таблиц нажмите кнопку

19. Создание таблицы Работник (Employee) В левом верхнем углу конструктора таблиц нажмите
Обновить, как показано на следующем рисунке.

Слайд 22

20. Создание таблицы Работник (Employee)

В диалоговом окне Предварительный просмотр обновления базы данных

20. Создание таблицы Работник (Employee) В диалоговом окне Предварительный просмотр обновления базы
нажмите кнопку Обновить базу данных.
Ваши изменения сохраняются в файл локальной базы данных.

Слайд 23

21. Создание таблицы

21. Создание таблицы

Слайд 24

https://msdn.microsoft.com/ru-ru/library/ms233763.aspx

https://msdn.microsoft.com/ru-ru/library/ms233763.aspx

Слайд 25

11. Изъян в дизайне системы

Возможно, вы еще не забыли, что в классе

11. Изъян в дизайне системы Возможно, вы еще не забыли, что в
PayrollDatabase были только открытые статические методы. Как теперь выясняется, это решение не годится. Как приступить к работе с реальной базой данных, не испортив все тесты, в которых использовались статические методы? Мы не хотим замещать класс PayrollDatabase классом, обращающимся к реальной базе. Если так поступить, то все ранее написанные автономные тесты станут обращаться к реальной базе данных. Хорошо бы сделать PayrollDatabase интерфейсом, чтобы можно было легко подставлять альтернативные реализации. Одна реализация хранила бы данные в памяти, чтобы выполнение тестов занимало немного времени. А другая работала бы с данными в реальной базе.

Слайд 26

12. Рефакторинг системы

Для этого нам придется прибегнуть к рефакторингу, выполняя после каждого

12. Рефакторинг системы Для этого нам придется прибегнуть к рефакторингу, выполняя после
шага автономные тесты, чтобы случайно не испортить код.
Первым делом создадим экземпляр класса PayrollDatabase и сохраним его в статической переменной instance. Затем переименуем все статические методы в PayrollDatabase, добавив в имя слово Static. А тело каждого метода перенесем в новый не-статический метод с прежним именем (см. листинг далее).

Слайд 27

13. Рефакторинг кода

13. Рефакторинг кода

Слайд 28

Стр. 650!!!

Стр. 650!!!
Имя файла: Расчет-заработной-платы:-База-данных-1.pptx
Количество просмотров: 34
Количество скачиваний: 0