Facebook google+ e-mail
Учимся программировать на JAVA
Практикум по программированию на языке Java

Занятие 14. База данных: подключение и первые таблицы

Итак, первый шаг сделан - мы научились создавать БД. Однако, наша новая БД пока неработоспособна: она как бы есть, но ее как бы и нет. Вспомним, что БД – это набор взаимосвязанных таблиц. Нет таблиц – значит, негде хранить данные. Значит, займемся таблицами.

Однако, для начала обсудим одну техническую деталь – выбор БД. Зачем это нужно? Дело в том, что один сервер БД может обслуживать несколько БД. Скажем, одна БД предназначена для управления торговлей (закупка товаров, их хранение, их реализация), другая – для расчета заработной платы, третья – для электронного магазина на сайте, четвертая – для взаимодействия с клиентами и проч. Для взаимодействия с каждой из этих БД нужно четко указать – с какой именно БД мы сейчас работаем. Это можно сделать многими способами, но пока у нас есть только программа- клиент (mysql.exe), поэтому с нее и начнем.

Итак, запустите mysql.exe. В командной строке введите

use moneyfornothing;

Вы должны увидеть следующее:

Программируем на Java. Базы данных. Запускаем MySQL

Обратите внимание на ответ сервера БД «Database changed». Он означает, что сервер БД «понял» вас и переключился на обслуживание БД с именем moneyfornothing. Давайте посмотрим, какие таблицы содержатся в нашей БД (ответ, конечно, известен заранее – никакие, т.к. мы их еще не создавали, но нам важно убедиться, что это «известно» и серверу БД). Для этого введите

show tables;

На экране вы увидите следующее:

Программируем на Java. Базы данных. Показать таблицы

Сервер БД ответил лаконично «Empty set», что означает «Множество пусто» или, на человеческом языке, «Ничего нет». Т.е. сервер БД сказал нам то, что мы и без него знали.

А теперь, попробуем создать таблицы. Здесь мы вступаем в поистине необъятную область проектирования БД. Сразу скажем, что у нас нет никакой возможности хоть сколько-нибудь глубоко погрузиться в вопросы проектирования БД; все, что мы на этом этапе можем – попросить поверить нам на слово. Позже, когда вы наберетесь немного опыта, вы сможете обратиться к многочисленной (и весьма объемистой) литературе, но это потом. Сейчас ограничимся простым, может быть не самым изящным, но работоспособным решением.

Для начала давайте разберемся – какие данные мы собираемся хранить? Понятно, что нам нужно хранить хронологические последовательности наших доходов и расходов. Слово «хронологические» подсказывает, что в наших таблицах обязательно будет присутствовать дата (может быть, хотя это и необязательно, и время). Слова «доходы» и «расходы» подсказывает нам, что еще одним типом данных будут числа, причем, числа с дробной частью (конечно, вы можете все доходы и расходы округлять и хранить только их целые части, но давайте поступать правильно и сохранять разумную точность).

Кроме того, немного подумав, мы увидим, что доходы и расходы отличаются друг от друга своего рода «направленностью»: доходы увеличивают суммы в наших кошельках, а расходы – уменьшают. Как это отобразить в таблице? Можно, например, доходы вносить в таблицу как положительные числа, а расходы – как отрицательные. Психологически это полностью соответствует смыслу этих понятий. И такое решение вполне допустимо. Кажется, на нем и следует остановиться, но давайте рассмотрим следующую ситуацию.

Допустим, вы хотите узнать насколько доходы превысили расходы за определенный период времени, например, за месяц. Пусть доходы за этот месяц составили 50 000.00 рублей, а расходы – 45 000.00 рублей. Очевидно, что вы потратили меньше, чем получили и у вас имеется некоторый запас (а именно, 5 000.00 рублей). Но этот же результат мы хотим получить из данных, хранящихся в БД. Что нужно сделать, для получения этого результата? Да очень просто – вычесть общую сумму расходов (т.е. -45 000.00) из общей суммы доходов (т.е. 50 000.00):

50 000.00 – (-45 000.00) = 95 000.00

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

50 000.00 – 45 000.00 = 5 000.00

Есть и другой способ, который позволит забыть о знаках числовых величин. Записи, относящиеся к доходам и расходам будут помечаться дополнительными значками (например «+» и «-»). Сами суммы по доходам и расходам будут всегда положительными. Теперь, для того, чтобы получить отчет о финансовых результатах за месяц, нужно просуммировать все доходы (они помечены значком «+»), все расходы (они помечены значком «-») и вычесть расходы из доходов.

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

Кажется все? Есть даты, есть суммы и теперь итоги (они, вообще говоря, называются бухгалтерским термином «баланс») могут быть легко рассчитаны. Если речь идет только об этом, то да – это все. Но, как правило, нас интересует не просто разница между доходами и расходами, но и более детальная информация: сколько мы заработали на основной работе, сколько – от консультаций, сколько получили гонораров и проч. Аналогично и по расходам: нас может заинтересовать, а рано или поздно обязательно заинтересует, величина расходов на бензин, на продукты питания, на коммунальные услуги (на самом деле, как показывает практика, статей расходов во много раз больше, чем статей доходов). Простая таблица, которую мы чуть выше спроектировали, такой информации предоставить не может – ее там просто нет. Значит, нужно каждую сумму детализировать, т.е. указать точный источник дохода и точную причину расхода. Как бы вы это сделали? Задержитесь на этом и подумайте самостоятельно, а потом давайте разбираться вместе.

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

Дата Сумма Признак Описание (расшифровка)
01.09.20131 610.00 -Заправка машины
01.09.201365.10 -Пиво «Carlsberg»
01.09.2013100.00 -DVD-диск (фильм «Аватар»)
09.09.2013950.00 -Заправка машины
09.09.2013200.00 -Пополнение счета на телефон
18.09.20131 023.00 -Заправка машины
20.09.2013400.00 -Автомойка
21.09.2013150.00 -Пополнение счета на телефон
24.09.201363.00 -Пиво «Stella Artua»

Теперь нас интересует, сколько мы потратили денег на бензин. Ответ простой: 1 610 + 950 + 1 023 = 3 583. Но чтобы получить этот ответ, нам пришлось просмотреть таблицу, выписать нужные суммы, а потом их сложить. Для гарантии вы, скорее всего, повторите эту процедуру. В случае большой таблицы это может занять много времени и вероятность ошибки существенно возрастет: какие-то суммы вы проглядите, а какие-то посчитаете дважды. Само по себе описание – полезная (и более того – очень нужная) информация. Но, увы, возможности классификации у описаний – почти нулевая. Как же быть?

Тут надо подумать, поскольку задача из элементарной становится достаточно сложной. А ведь это только начало; настоящие БД порой настолько сложно устроены, что разработчики, чтобы окончательно не запутаться, вынуждены рисовать таблицы и взаимосвязи между ними на больших досках и плакатах. Видите, вы уже столкнулись с тем, что называется проектированием БД. И хотя наша задача, признаемся, элементарна, но и в ней проявляются некоторые особенности, которые нужно учитывать.

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

 

Занятие 13. База данных – первое знакомство

 

Занятие 15.

 

Автор: Alex Tuesday

 

Все уроки ... 07.06.2014