Сайт о телевидении

Сайт о телевидении

» » Обзор программных средств для создания баз данных. Проектирование, создание и управление Базой Данных. разработка программного кода приложения

Обзор программных средств для создания баз данных. Проектирование, создание и управление Базой Данных. разработка программного кода приложения

  • Разработка под Android
    • Tutorial
    • Recovery Mode

    Всем привет! Меня зовут Олег и я программист-любитель под Android. Любитель потому что в данный момент я зарабатываю деньги программированием в совсем другом направлении. А это хобби, которому я посвящаю свое свободное время. К сожалению у меня нет знакомых программистов под Android и все свои базовые знания я черпаю либо из книг, либо из интернета. Во всех тех книжках и статьях в интернете, которые я читал, созданию базы данных для приложения отводится крайне мало места и по сути все описание сводится к созданию класса являющегося наследником SQLiteOpenHelper и последующему внедрению SQL кода в Java код. Если не считать, что мы получаем плохо читаемый код (а если в нашем приложении появляется больше 10 таблиц, то вспоминать все эти взаимосвязи между таблицами тот еще ад), то в принципе жить можно конечно, но как-то совершенно не хочется.
    Забыл сказать самое главное, можно сказать что это моя проба пера тут. И так поехали.

    О вечном вопросе: почему?

    Почему в книгах и в статьях, посвященных программированию под Android, не описываются инструменты для проектирования архитектуры базы данных и какие-нибудь паттерны для работы с базами данных на этапе их создания я честно говоря не знаю. Казалось бы добавить всего пару страниц в книгу или написать отдельную статью (как делаю это я сейчас) проще простого - но нет. В этой статье, я кратко пройдусь по инструментам, которые я использую в своей работе и более подробно по коду который отвечает за начальное создание БД, который с моей точки зрения выглядит более читаемым и удобным.


    Если в нашем приложении больше 5 таблиц, то уже было бы не плохо использовать какой-нибудь инструмент для визуального проектирования архитектуры БД. Поскольку для меня это хобби, то и использую я абсолютно бесплатный инструмент под названием Oracle SQL Developer Data Modeler (скачать его можно ).

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

    Спроектировав саму архитектуру, приступаем к более нудной части, заключающийся в созданий sql кода для создания таблиц. Для помощи в этом вопросе, я уже использую инструмент под названием SQLiteStudio (его в свою очередь можно скачать тут ).

    Данный инструмент является аналогом таких известных продуктов как SQL Naviagator, Toad etc. Но как следует из названия, заточен он под работу с SQLite. Он позволяет визуально создать БД и получить DDL код создаваемых таблиц. Кстати, он также позволяет создавать представления (View), которые вы тоже при желании можете использовать в своем приложении. Не знаю насколько правильный подход использования представлений в программах для Android, но в одном из своих приложений я использовал их.

    Собственно говоря я больше не каких сторонних инструментов не использую, и дальше начинается магия с Android Studio. Как я уже писал выше, если начать внедрять SQL код в Java код, то на выходе мы получим плохочитаемый, а значит и плохо расширяемый код. Поэтому я выношу все SQL инструкции во внешние файлы, которые у меня находятся в директории assets . В Android Studio выглядит это примерно так:


    О директориях db и data

    Внутри директории assets я создал две директории db_01 и data_01 . Цифры в названиях директорий соответствуют номеру версии моей БД с которой я работаю. В директории db у меня хранятся сами SQL скрипты создания таблиц. А в директории data хранятся данные необходимые для начального заполнения таблиц.


    Теперь давайте посмотрим на код внутри моего DBHelper который я использую в своих проектах. Сначала переменные класса и конструктор (тут без каких либо неожиданностей):

    Private static final String TAG = "RoadMap4.DBHelper"; String mDb = "db_"; String mData = "data_"; Context mContext; int mVersion; public DBHelper(Context context, String name, int version) { super(context, name, null, version); mContext = context; mVersion = version; }
    Теперь метод onCreate и тут становится уже интереснее:

    @Override public void onCreate(SQLiteDatabase db) { ArrayList tables = getSQLTables(); for (String table: tables){ db.execSQL(table); } ArrayList> dataSQL = getSQLDatas(); for (HashMap hm: dataSQL){ for (String table: hm.keySet()){ Log.d(TAG, "insert into " + table + " " + hm.get(table)); long rowId = db.insert(table, null, hm.get(table)); } } }
    Логически он разделен на два цикла, в первом цикле я получаю список SQL - инструкций для создания БД и затем выполняю их, во втором цикле я уже заполняю созданные ранее таблицы начальными данными. И так, шаг первый:

    Private ArrayList getSQLTables() { ArrayList tables = new ArrayList<>(); ArrayList files = new ArrayList<>(); AssetManager assetManager = mContext.getAssets(); String dir = mDb + mVersion; try { String listFiles = assetManager.list(dir); for (String file: listFiles){ files.add(file); } Collections.sort(files, new QueryFilesComparator()); BufferedReader bufferedReader; String query; String line; for (String file: files){ Log.d(TAG, "file db is " + file); bufferedReader = new BufferedReader(new InputStreamReader(assetManager.open(dir + "/" + file))); query = ""; while ((line = bufferedReader.readLine()) != null){ query = query + line; } bufferedReader.close(); tables.add(query); } } catch (IOException e) { e.printStackTrace(); } return tables; }
    Тут все достаточно просто, мы просто читаем содержимое файлов, и конкатенируем содержимое каждого файла в элемент массива. Обратите внимание, что я произвожу сортировку списка файлов, так как таблицы могут иметь внешние ключи, а значит таблицы должны создаваться в определенном порядке. Я использую нумерацию в название файлов, и с помощью нею и произвожу сортировку.

    Private class QueryFilesComparator implements Comparator{ @Override public int compare(String file1, String file2) { Integer f2 = Integer.parseInt(file1.substring(0, 2)); Integer f1 = Integer.parseInt(file2.substring(0, 2)); return f2.compareTo(f1); } }
    С заполнением таблиц все веселей. Таблицы у меня заполняются не только жестко заданными значениями, но также значениями из ресурсов и UUID ключами (я надеюсь когда-нибудь прийти к сетевой версии своей программы, что бы мои пользователи могли работать с общими данными). Сама структура файлов с начальными данными выглядит так:


    Несмотря на то, что файлы у меня имеют расширение sql, внутри не sql код а вот такая штука:

    Prioritys
    pri_id:UUID:UUID

    pri_name:string:normal
    pri_color:color:colorGreen
    pri_default:int:1
    prioritys
    pri_id:UUID:UUID
    pri_object:string:object_task
    pri_name:string:hold
    pri_color:color:colorBlue
    pri_default:int:0
    prioritys
    pri_id:UUID:UUID
    pri_object:string:object_task
    pri_name:string:important
    pri_color:color:colorRed
    pri_default:int:0
    prioritys
    pri_id:UUID:UUID

    pri_name:string:normal
    pri_color:color:colorGreen
    pri_default:int:1
    prioritys
    pri_id:UUID:UUID
    pri_object:string:object_project
    pri_name:string:hold
    pri_color:color:colorBlue
    pri_default:int:0
    prioritys
    pri_id:UUID:UUID
    pri_object:string:object_project
    pri_name:string:important
    pri_color:color:colorRed
    pri_default:int:0

    Структура файла такая: я выполняю вызов функции split(":") применительно к строчке и если получаю что ее размер равен 1 то значит это название таблицы, куда надо записать данные. Иначе это сами данные. Первое поле это название поля в таблице. Второе поле тип, по которому я определяю что мне надо в это самое поле записать. Если это UUID - это значит мне надо сгенерировать уникальное значение UUID. Если string значит мне надо из ресурсов вытащить строковое значение. Если color, то опять-таки, из ресурсов надо вытащить код цвета. Если int или text, то я просто преобразую данное значение в int или String без каких либо телодвижений. Сам код выглядит вот так:

    Private ArrayList> getSQLDatas() { ArrayList> data = new ArrayList<>(); ArrayList files = new ArrayList<>(); AssetManager assetManager = mContext.getAssets(); String dir = mData + mVersion; try { String listFiles = assetManager.list(dir); for (String file: listFiles){ files.add(file); } Collections.sort(files, new QueryFilesComparator()); BufferedReader bufferedReader; String line; int separator = 0; ContentValues cv = null; String fields; String nameTable = null; String packageName = mContext.getPackageName(); boolean flag = false; HashMap hm; for (String file: files){ Log.d(TAG, "file db is " + file); bufferedReader = new BufferedReader(new InputStreamReader(assetManager.open(dir + "/" + file))); while ((line = bufferedReader.readLine()) != null){ fields = line.trim().split(":"); if (fields.length == 1){ if (flag == true){ hm = new HashMap<>(); hm.put(nameTable, cv); data.add(hm); } // наименование таблицы nameTable = line.trim(); cv = new ContentValues(); continue; } else { if (fields.equals("UUID")){ cv.put(fields, UUID.randomUUID().toString()); } else if (fields.equals("color") || fields.equals("string")){ int resId = mContext.getResources().getIdentifier(fields, fields, packageName); Log.d(TAG, fields + " " + resId); switch (fields){ case "color": cv.put(fields, resId); break; case "string": cv.put(fields, mContext.getString(resId)); break; default: break; } } else if (fields.equals("text")){ cv.put(fields, fields); } else if (fields.equals("int")){ cv.put(fields, Integer.parseInt(fields)); } } flag = true; } bufferedReader.close(); } } catch (IOException e) { e.printStackTrace(); } return data; }

    Как было упомянуто выше, правильное использование специализированных компонент ставит их по производительности практически на одну ступень с вызовами API выбранной СУБД. На мой взгляд, использование API оправданно в том редком случае, когда возможностей даже специфических компонент для разработки недостаточно, хотя это и крайне маловероятно, или если для платформы, под которую ведется разработка, такие компоненты отсутствуют (Sun Solaris). Создание запросов к базе данных. Выбрав стратегию доступа к данным и определившись с архитектурой приложения, можно обратить внимание на то, каким образом мы собираемся их использовать. Главное правило состоит в том, что чем меньше вы запрашиваете данных у сервера, тем быстрее будет работать ваше приложение. Конечно, запрашивать у сервера меньше данных, чем пользователь хочет увидеть за один раз, нерационально, поэтому первым вопросом должен быть "какие данные необходимы для каждого модуля системы?" Разработчикам, переходящим с настольных баз данных, требуется перебороть в себе таблично ориентированное представление о базах данных. База InterBase, несомненно, содержит таблицы. Но при проектировании программы вы их не видите, вы видите только результат выполнения запроса SQL. Можно, конечно, написать запрос, который возвращает все записи из таблицы (по крайней мере, видимые для данной транзакции):

    SELECT * FROM SOME_TABLE

    Но в большинстве случаев такой запрос вернет значительно больше данных, чем это требуется для оптимальной работы пользовательского интерфейса и обработки бизнес-процессов. Подобный запрос, кстати, не использует такие полезные особенности InterBase/ Firebird, как возможность объединения (JOIN) и сортировки (ORDER BY) результирующего набора данных.

    Запрашиваете меньше данных - получаете большую скорость. Для осуществления определенных задач в программе вам могут быть не нужны все столбцы таблицы. Фактически не стоит часто использовать знак "*" в запросах выборки, лучше использовать прямое перечисление полей. Подобный способ основывается на том, что даже если мне нужны все столбцы таблицы, мне не нужны столбцы таблицы, которые будут добавлены в будущем, когда я завершу эту часть программы. Определение конкретных столбцов в запросе гарантирует, что я получу только те столбцы, которые я заявил в запросе, даже если структура таблицы будет развиваться дальше. Аналогично даже если пользователь действительно нуждается во всех без исключения записях из таблицы, ему необязательно видеть их все в один момент времени. Пользователю может быть крайне неудобно искать поля в середине сетки данных в таблице с количеством записей выше среднего. Скажем, если у вас в таблице более 100 записей, вам уже следует основательно подумать над дизайном вашего приложения.
    К чему все это сводится? Вот к чему: чем меньше вы запрашиваете и пересылаете данных, тем быстрее ваше приложение будет работать, даже на не очень скоростных сетях. Вот несколько прикладных методов, которые вы можете использовать для уменьшения количества выбираемых (SELECT) данных.

    Обеспечьте пользователю хорошие инструментальные средства для поиска записей, которые его интересуют. Если список слишком велик, чтобы отображать его в единственном неразрывном виде, разбейте его на логические страницы с табуляцией по первым буквам от "А" до "Я". Если и в этом случае списки получаются слишком длинными, предоставьте пользователю мощные средства фильтрации данных для сужения полученного в результате применения фильтра множества записей. Для реализации поиска данных в приложении вы можете взять на вооружение методы, используемые для поиска web-страниц. Когда пользователю выдается набор записей, даже если он сравнительно небольшой, достаточно использовать одно-два ключевых поля для формирования фильтра запроса. Пусть в приложении будет отдельное окно или часть окна, где пользователь может увидеть все данные по записи, если он обнаружил то, что искал. Старайтесь также использовать объединения таблиц (JOIN) в запросах вместо lookup-полей на формах всюду, где это будет возможно. Хотя и возможно оптимизировать выполнение метода TDataset. Lookup, даже этот улучшенный метод не будет работать быстрее объединения таблиц (JOIN) - про работу немодифицированного метода вообще можно не упоминать.

    Создание приложений для работы с базами данных.

    Базы данных используют, когда надо работать с большими объемами данных.

    Реляционная база данных это набор таблиц, процедур и др. объектов, поддерживающих ее работу. Таблица имеет имя – идентификатор, по которому на нее можно сослаться. Пример таблицы данных о сотрудниках Pers :

    Номер

    Отдел

    Фамилия

    Имя

    Отчество

    Год рождения

    Пол

    Характеристика

    Фотография

    Num

    Dep

    Fam

    Nam

    Par

    Year_b

    Sex

    Charact

    Photo

    Бухгалтерия

    Иванов

    Иван

    Иванович

    1950

    Цех 1

    Петров

    Петр

    Петрович

    1960

    Цех 2

    Сидоров

    Сидор

    Сидорович

    1955

    Цех 1

    Иванова

    Ирина

    Ивановна

    1961

    Столбцы таблицы соответствуют характеристикам объектов – полям. Каждое поле характеризуется именем и типом хранящихся данных. Имя поля – это идентификатор, который используется в различных программах для манипуляции данными. Как и любой идентификатор, имя поля может состоять только из латинских букв, только из одного слова и т. д. (строка 2 в таблице).

    Тип поля характеризует тип хранящихся в поле данных. Это могут быть строки, числа,булевы значения, большие тексты (например, характеристики сотрудников), изображения (фотографии сотрудников) и т.п.

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

    При построении таблиц баз данных важно обеспечить непротиворечивость информации. Обычно это делается введением ключевых полей – обеспечивающих уникальность каждой записи. Ключевым может быть одно или несколько полей. В приведенном примере можно было бы сделать ключевыми совокупность полей Fam, Nam, Par . Но в этом случае нельзя было бы заносить в таблицу сведения о полных однофамильцах, у которых совпадают фамилия, имя и отчество. Поэтому в таблицу введено первое поле Num – номер, которое можно сделать ключевым, обеспечивающим уникальность каждой записи.

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

    Для упорядочивания данных используется понятие индекса . Индекс показывает, в какой последовательности желательно просматривать таблицу. Он является как бы посредником между пользователем и таблицей:

    Индексы могут быть первичными и вторичными .
    Например, первичным индексом могут служить поля, отмеченные при создании базы данных как ключевые. А вторичные индексы могут создаваться из других полей как в процессе создания самой базы данных, так и позднее в процессе работы с ней. Вторичным индексам присваиваются имена – идентификаторы, по которым их можно использовать.
    База данных обычно содержит не одну, а множество таблиц. Например, база данных о некоторой организации может содержать таблицу имеющихся в ней подразделений с характеристикой каждого из них.
    Таблица Depс полями Dep и Proisv

    В связанных таблицах обычно одна выступает как главная , а другая или несколько других - как вспомогательные, управляемые главной. Главная и вспомогательные таблицы связываются друг с другом ключом . В качестве ключа могут выступать какие-то поля, присутствующие в обеих таблицах.

    В примере головной может быть таблица Dep , вспомогательной Pers , а связываться они могут по полю Dep , присутствующему в обеих таблицах.

    Каждой записи в главной таблице Dep соответствуют те записи вспомогательной таблицы Pers , в которых ключевое поле Dep с названием отдела совпадает с названием отдела в текущей записи главной таблицы. Иначе говоря, если в текущей записи главной таблицы в поле Dep написано «Бухгалтерия», то во вспомогательной таблице Pers выделяются все записи сотрудников бухгалтерии.

    Создают базы данных и обрабатывают запросы к ним системы управления базами данных – СУБД: Paradox, Microsoft Access, FoxPro, Oracle, InterBase и т.д.

    Разные СУБД по разному организуют и хранят базы данных. Paradox использует для каждой таблицы один файл. В Microsoft Access и InterBase несколько таблиц хранятся как один файл. В этом случае база данных – это имя файла с путем доступа к нему. Системы типа клиент/сервер (Sybase, Microsoft SQl, Oracle) хранят все данные на отдельном компьютере и общаются с клиентом посредством специального языка – SQL .

    Для упорядочения обращения к базам данных используют псевдонимы баз данных. Псевдоним (alias) содержит всю информацию, необходимую для обеспечения доступа к базе данных. Эта информация сообщается только один раз при создании псевдонима. А приложение для связи с базой данных использует псевдоним. В этом случае приложению безразлично, где физически расположена база данных, а часто безразлична и СУБД, создавшая и обслуживающая эту базу данных. При смене системы каталогов, сервера и т.п. ничего в приложении переделывать не надо. Достаточно, чтобы администратор базы данных ввел соответствующую информацию в псевдоним.

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

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

    Средства Delphi , предназначенные для разработки и эксплуатации приложений, использующих базы данных :

    BDE (Borland Database Engine ) – машина баз данных Borland . Представляет собой набор DLL -библиотек, обеспечивающих низкоуровневый доступ к локальным и клиент-серверным БД. Должна устанавливаться на каждом компьютере, который использует приложения для работы с БД, написанные для Delphi .

    SQL Links – драйверы для работы с удаленными серверами данных (MS SQL Server, Oracle)

    BDE Administrator – утилита для установки псевдонимов (имен) баз данных, параметров БД и драйверов баз данных на конкретном компьютере. При работе с БД из приложения, созданного с помощью Delphi , доступ к базе данных производится по ее псевдониму. Параметры определяемой псевдонимом БД, действуют только для этой БД; параметры, установленные для драйвера БД, действуют для всех баз данных, использующих драйвер. Кроме того, можно произвести установку таких общих для всех БД параметров, как формат даты и времени, форматы представления числовых значений, используемый языковый драйвер и т.д.

    Database Desktop (DBD ) – средство для создания, изменения и просмотра БД. Эта утилита прежде всего ориентирована на работу с таблицами локальных СУБД, например Paradox . Можно с некоторыми ограничениями создавать и просматривать таблицы баз данных, работающих под управлением серверов: InterBase, MS SQL Server, Oracle .

    DBD позволяет программисту возможность сформировать запрос к БД методом QBE (Query By Example – запрос по образцу).

    SQL Explorer – универсальная утилита, совмещающая многие функции BDE Administrator и DBD . С ее помощью можно создавать и просматривать псевдонимы БД, просматривать структуры и содержимое таблиц БД, формировать запросы к БД на языке SQL , создавать словари данных (шаблоны полей таблиц).

    SQL Monitor – средство для трассировки выполнения SQL- запросов.

    Невизуальные компоненты для работы с БД – служат для соединения приложения с таблицами БД в локальных и распределенных системах. Они расположены на странице Data Access палитры компонентов. С помощью невизуальных компонентов осуществляется подключение к базам данных, формирование запросов к ним, манипулирование таблицами.

    Визуальные компоненты для работы с БД – предназначены для визуализации записей наборов данных или их отдельных полей. Эти компоненты расположены на странице Data Controls палитры компонентов. Они служат основным инструментом разработки пользовательского интерфейса доступа к данным.

    Особенности программ для работы с БД.

    Характерной особенностью созданных с помощью Delphi программ для работы с БД является непременное использование в них BDE (процессор реляционной базы данных Borland Database Engine , включенный в состав Delphi ) , которая осуществляет роль связующего моста между программой и БД.


    BDE берет на себя всю низкоуровневую работы по обеспечению клиентской программы нужными ей данными, поэтому в общем случае взаимодействие программы с данными происходит следующим образом:

    BDE не является частью программы. В зависимости от типа СУБД она может размещаться на машине клиента или сервера.

    Обычно между программой и BDE располагается слой компонентов, существенно упрощающих разработку программ. Невизуальные компоненты осуществляют непосредственную работу с BDE , и три из них (TTable, TQuery, TStoredProc) служат наборами данных, в то время как визуальные компоненты отображают поставляемые им данные и служат для создания удобного интерфейса пользователя. Между наборами данных и визуальными компонентами обязательно располагаются компоненты TDataSource , играющие роль клапанов, открывающих или закрывающих потоки данных, которыми обмениваются источники с визуальными компонентами (см рис.).

    Некоторые поддерживаемые в Delphi типы БД.

    Локальные и файл серверные БД.

    В локальных БД базы данные располагаются на машине клиента. В файл серверных БД базы данные располагаются на сетевом файл-сервере.

    Локальный вариант может обеспечить лишь однопользователький режим доступа к данным.

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

    При выполнении запроса к БД, расположенной на файловом сервере, в действительности происходит запрос к локальной копии данных на компьютере пользователя. Поэтому перед выполнением запроса данные в локальной копии в полном объеме обновляются из реальной БД. Так, если таблица БД состоит из 10000 записей, а для выполнения запроса нужно только 10 записей, все равно клиенту передаются все 10000 записей. Таким образом серьезно загружается сеть.

    Клиент-серверные БД.

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

    Клиент формирует запрос к серверу на языке запросов SQL (Structured Query Language – структурированный язык запросов), являющемсяпромышленным стандартом для реляционных баз данных. SQL -сервер обеспечивает интерпретацию запроса, его выполнение, формирование результата и выдачу этого результата клиенту. При этом ресурсы клиентского компьютера не участвуют в физическом выполнении запроса: клиентский компьютер лишь отсылает запрос к серверной БД и получает результат, после чего интерпретирует его необходимым образом и представляет пользователю. По сети передаытся только те данные, которые нужны клиенту.

    При выполнении запросов сервером существенно повышается степень безопасности данных, поскольку правила целостности данных определяются на сервере и являются едиными для всех приложений, использующих эту БД. Мощный аппарат транзакций, поддерживаемый SQL- серверами, блокирует одновременное изменение одних и тех же данных различными пользователями и предоставляет возможность откатов к первоначальным значениям при внесении в БД изменений, закончившихся аварийно.

    Создание и просмотр псевдонимов баз данных.

    1. С помощью DBD.

    Обчно вызов Database Desktop включен в главное меню Delphi в раздел Tools . Если это не сделано можно включить его туда командой Tools|Configure Tools… (файл DBD32.exe ).

    DBD позволяет создавать таблицы баз данных некоторых СУБД, задавать и изменять их структуру.

    В можно создавать и просматривать псевдонимы, выполнив команду Tools|Alias Manager . При этом появляется окно Alias Manager :


    При выборе псевдонима в списке Database Alias автоматически изменяется тип драйвера в выпадающем списке


    1. С помощью BDE Administrator .


    1. С помощью Database Explorer (SQL Explorer).

    Вызов этой программы производится из главного меню Delphi командой Database| Explore.


    Кафедра “Прикладной информатики”

    Пояснительная записка к курсовой работе

    по дисциплине:

    “Базы данных”

    “Разработка базы данных и клиентского приложения”

    Калуга 2009


    Введение

    1.Постановка задачи

    2.Проектирование, создание и управление Базой Данных

    3.Технологическая инструкция пользователя

    Заключение

    Список используемой литературы


    Введение

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

    Актуальность курсовой работы, определена как необходимость создания и проектирования баз данных.

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

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

    Моя база данных предназначена для автоматизации операций, получения достоверной и оперативной информации.

    Задачи курсовой работы состоят в следующем:

    Реализовать базу данных;

    Реализовать пользовательский интерфейс;

    Составить отчеты;

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


    1.Постановка задачи

    Разработанная база дынных состоит из нескольких “уровней”. Самый абстрактный “уровень” это схема данных. На этом уровне непосредственно отображены связи между таблицами.

    В данной курсовой работе поставлены задачи:

    Построение физической модели на компьютере (при помощи Erwin);

    Определение связей, типов данных;

    Разработка удобного пользовательского интерфейса;

    Создание запросов, форм;

    Создание отчетов (по заданию);

    Построение главной кнопочной формы;

    В моей курсовой работе создан фрагмент системы учета сотрудников, в связи с этим учет состоит из следующих операций:

    В моей курсовой работе создан фрагмент системы учета товара, в связи с этим учет состоит из следующих операций:

    Учет товаров;

    Учет товара по группам;

    Учет товаров по чекам;

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

    2. Проектирование, создание и управление Базой Данных

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

    1)Таблица Группа товара, содержит 2 столбца Номер группы товара и Название группы товара.


    2) Таблица Товар, содержит 4 столбца Номер_товара, Название товара, Цена, Номер группы товара.


    3) Таблица чек, содержит 2 столбца: Номер_чека, Дата.

    4) Таблица Товар по чеку, содержит 3 столбца: Номер товара, Номер чека. Количество.

    Для удобства работы с базой данных было создано несколько форм.

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

    Формы для запросов.

    1)Форма для запроса1(см. Рис. 1)

    Необходимо вывести товар по определённому номеру чека. В этой форме представлен удобный интерфейс для ввода информации, а также удобного просмотра отчета.


    Рис. 1 Форма для запроса1

    Например. Вводим в textBox номер чека – 7, и нажимаем на кнопку – Просмотр отчета.(см. Рис. 2)


    Рис. 2 Работа отчета1

    2)Форма для запроса2

    Необходимо вывести товар по дате. В этой форме представлен удобный интерфейс для ввода информации, а также удобного просмотра отчета.


    Рис. 3 Форма для запроса2

    Например. Вводим в textBox дату – 12.11.08 и нажимаем на кнопку – Просмотр отчета. (см. Рис4)


    Рис. 4 Работа запроса2


    Организация введения данных в таблицы происходит через соответствующие формы. Для удобства была создана главная кнопочная форма. (см. Рис. 5)

    Эта форма выглядит так:


    Рис. 5 Кнопочная форма

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

    В подменю Таблицы в удобной форме представлены таблицы для ввода информации.

    Схема данных.(см. Рис. 6


    Рис. 6 Схема данных

    Схема данных была создана при помощи программы Erwin.

    3. Технологическая инструкция пользователя

    Например:

    - Вводим новый товар.

    Для того чтобы ввести новый товар необходимо выполнить следующие действия(см. Рис. 7):

    Зайти на главную кнопочную форму -> нажать кнопку таблицы -> нажать кнопку товар -> ввести название товара его цену и выбрать к какой группе товаров он относится.


    Рис. 7 Ввод нового сотрудника

    Если в списке групп товаров нужной группы не то вводим её в ручную

    Нажимаем кнопку Группа товара -> и вводим новую группу товара. (см. Рис 8)



    Рис 8. Создание новой группы товара.


    -> выбирает также номер чека по которому проходит данный товар -> вводим количество этого товара. (см. Рис 10)



    Заключение

    Цели курсовой работы выполнены полностью. Была разработана база данных, для учета товара. Курсовая работа создана в программе MS Access. Схема данных (физическая модель) была построена в программе Erwin. Также реализован удобный пользовательский интерфейс для безопасного и легкого ввода информации. В данной работе также выполнены задачи, которые ставились в начале курсовой работы, все задачи решены, и их решение можно просмотреть непосредственно в курсовой работе.

    Разработав эту курсовую работу, я понял, что СУБД Microsoft Access мощный и удобный инструмент для создания баз данных. Графический многооконный интерфейс, который дает возможность мне в диалоговом режиме создавать таблицы, формы, запросы, отчеты. Специальные приспособления, которые автоматизируют работу во время создания и ведения базы данных (Мастера и Конструкторы, Ассистенты и т.п.) заметно упрощают весь процесс и делают программу доступной в изучении каждому.

    Я считаю, что в моей профессии такие навыки, пусть даже базовые, мне со временем очень пригодятся.

    А так же было очень интересно и удобно работать в MS Access, создавать формы, работать со справкой, просматривать и изучать книги по базам данных и в частности MS Access. Несомненно, удалось познакомиться с такой замечательной программой как Erwin, которая помогает быстрее и лучше разобраться в создании баз данных. Конечно, современные базы данных с каждым днем становятся все больше и больше, удовлетворяя потребностям пользователей, следовательно, возникает задача, как создать такие базы данных, как ими управлять.… Прочитав и разобрав эту курсовую работу можно, несомненно, получить базовые навыки в построении баз данных.

    Список используемой литературы

    1. Microsoft Access 2000. Шаг за шагом: Практ. пособ. / Пер. с англ.

    М.: Издательство ЭКОМ, 2002. - 352 с.: илл.

    2. Самоучитель: Office Access 2003. - СПб.: Питер, 2004. - 464 с.: ил.

    3. Базы данных. Проектирование, реализация и сопровождение. Теория и

    практика. 3-е издание. : Пер. с англ. - М. : Издательский дом "Вильяме",

    2003. - 1440 с. : ил. - Парал. тит. англ.

    ПОДДЕРЖКА БАЗ ДАННЫХ

    11.1. Технологии доступа к данным

    В Visual C++ имеются технологии доступа к данным, обеспечивающие создание приложений для работы с базами данных. «Количество доступных Windows-приложениям интерфейсов доступа к данным может показаться чрезмерным. Какую же из технологий с загадочными именами – DAO, ODBC, RDO, UDA, OLE DB или ADO – выбрать для построения конкретного приложения» [л.10,стр. 242]. Большинство технологий доступа базируются на двух ключевых технологиях: ODBC (Open Database Connectivity – открытая связь с базами данных) и DAO (Data Access Object – объекты доступа к данным).

    Сравнительные параметры технологий ODBC и DAO могут быть представлены следующим образом:

    Параметр

    Архитектура

    Набор DLL-модулей,драйверы

    Набор объектов OLE

    Источники данных

    Файлы БД любых форматов

    А также SQL Server и Oracle

    Файлы БД формата.mdb,

    Access, FoxPro, Paradox

    Соединение с базой данных

    Объект класса CDatabase

    Объект класса CDaoDatabase

    Выборка данных

    Объект класса Crecordset

    Объект класса CDaoRecordset

    Просмотр данных

    Объект класса CrecordView

    Объект класса CDaoRecordView

    Набор функций

    Меньший набор функций, чем

    Большой набор функций,

    нет аналогов в ODBC

    Между технологиями ODBC и DAO есть много общего, например, использование классов MFC с похожими функциями для выполнения одинаковых операций соединения с БД, выборки набора записей БД и просмотра их. Но классы DAO содержат больший набор функций, а также функции, не имеющие аналогов в ODBC.

    Есть и существенные различия. Это касается архитектуры технологий в реализации системных библиотек. Классы ODBC реализованы как набор DLL-модулей, называемых драйверами (DLL, Dinamic-Link Library – динамически подключаемые библиотеки). А классы DAO реализованы как набор объектов OLE, что более современно.

    Еще существенное различие технологий заключается в их использовании для источников данных. В настоящее время разработано достаточно большое количество ODBC-драйверов для различных СУБД. Поэтому, ODBC может использоваться для файлов БД различных форматов, а DAO – только, в основном, для файлов БД формата.mdb. При этом приложение на основе ODBC может одновременно работать с различными СУБД без перекомпиляции за счет динамической загрузки драйверов.

    11.2. Создание приложения с базой данных

    Создание приложения для работы с базой данных на основе технологий ODBC или DAO требует выполнения следующих этапов:

    Установление доступа к базе данных. Этап заключается в регистрации заданной базы данных, как источника данных.

    Создание заготовки приложения. Этап выполняется автоматически с помощью мастера AppWizard при выполнении 6 этапов настройки приложения с выбором технологии доступа к источнику данных ODBC или DAO.

    Реализация операций с базой данных. Этап выполняется с использованием классов MFC соответствующей технологии доступа к данным.

    Цель работы - создание приложения, выполняющего операции с базой данных: просмотр, добавление, удаление.

    Воспользуемся файлом db.mdb, который представляет собой базу данных, созданную в СУБД Access. Файл содержит сведения о студентах: Name (Имя), Grade (Курс). Файл можно скачать по адресу ftp://ftp.sybex.com/2120/vcpp.exe [л.13,стр. 415]. Можно создать собственный файл в любой программе для работы с базами данных.

    Пусть экранная форма отображения содержимого базы данных данных будет выглядеть следующим образом:

    Untitled – Lab11

    File Edit Record View Help

    [|<] [<] [>] [>|]

    Установление доступа к базе данных

    Для установления доступа к базе данных, как к источнику данных, выполнить следующие действия:

    Создать папку Dbase и скопировать в нее файл db.mdb. Если создан собственный файл данных, то скопировать его.

    Щелкнуть последовательно Пуск, Настройка, Панель управления. В окне Панели управления дважды щелкнуть на 32-Bit ODBC. Появится окно Источники данных - Data Source Administrator.

    Щелкнуть на кнопке Add. Раскроется окно Create New Data Source со списком драйверов. Выбрать Microsoft Access Driver (.mdb) и щелкнуть на кнопке Finish. Появится окно ODBC Microsoft Access 7.0 Setup.

    Ввести в поле Data Source Name (Имя источника данных) значение Students, а в поле Description (Описание) – значение Name_Grade. Если создан собственный файл данных, то ввести соответствующие значения.

    Щелкнуть на кнопке Select. Раскроется окно Select Database (Выбор базы данных). Выбрать файл db.mdb или собственный файл.

    Щелкнуть на кнопке OK. Появится окно ODBC Microsoft Access 7.0 Setup. Щелкнуть на кнопке OK, и затем – на кнопке OK в окне ODBC Data Source Administrator.

    Итак, установлен доступ к файлу базы данных db.mdb (или к собстенному файлу) с помощью ODBC-драйвера Microsoft Access Driver (.mdb).

    Создание заготовки приложения

    Для создания приложения выполнить следующие действия:

    Выбрать команду File->New и вкладку Projects. Появится окно New Project со списком типов приложений.

    Выбрать из списка MFC Appwizard (exe). В поле Project name ввести имя проекта Lab11. В поле Location указана папка для хранения проекта (по умолчанию – то же, что и имя проекта). Щелкнуть на ОК.

    Выполнить 6 этапов настройки создаваемого приложения. На 1-ом этапе выбрать SDI (Single Document Interface) – одно открытое окно и щелкнуть на Next.

    2-ой этап – работа с базами данных. Переключатель Header files only (только файлы заголовков) предполагает только доступ к базам данных, Database view without file support – просмотр базы данных без поддержки операций с файлами (можно обновлять записи), Database view with file support - просмотр базы данных и поддержка операций с файлами (работа с множеством документов) . В нашем примере установить переключатель Database view with file support. Для соединения приложения и источника данных щелкнуть на кнопке Data Source (Источник данных).